与key相对应的无序元素map<key,value>的元素类型是std::pair<constkey,value>。如果元素的值部分有地址,则减去偏移量(std::pair<constkey,value>,second)和偏移量(std::pair<constkey,value>,first)此方法用于获取映射集中的所有key-value对象,这些对象将存储在另一个set对象中。syntaxvalues()示例创建一个mapcollection对象并添加一些内容,然后调用values方法来获取包含所有键值的collection对象并输出这些键值信息。publicstaticvoidmain(string[]args){mapmap=newhashmap()//定义映射集合对象地图输入(“apple”,“freshapple”)//向集合中添加对象地图输入(“计算机”,“配置良好的计算机”)地图输入集合值=映射值()//获取映射集(objectobject)的值集:values){系统输出打印(“键值:”对象.tostring())//输出keyvalueobject}
是的,相同的key将被发送到相同的reduce进程。如果同一个键对应的值级别太大,则减少的速度会非常慢。如果其他reduce处理的数据相对较少,则会出现数据倾斜。数据倾斜通常意味着某个分区器处理的数据量远远大于其他分区器处理的数据量,这在分布式系统中非常常见。一般来说,有两个原因:(1)分割算法随机性不够,这是罕见的。它可以被一个相对随机的算法代替。(2)一个键对应的数据量很大,必须将该键对应的数据发送到同一个分区器进行处理。对于第二个数据倾斜问题没有统一的处理方法,这取决于具体的问题。常用的方法是在密钥中加入一个随机扰动,使数量大的密钥被均匀划分为不同的子密钥。启动另一轮mapreduce对结果进行处理,去除按键干扰,对结果进行计数。因为在reduce处理的第一步中,key对应的结果被大大减少(在maincase中每个reducekey只输出一条记录),所以第二轮mapreduce中key对应的数据非常少。此外,如果一个映射输出同一个键的多个记录,则可以添加组合器以减少映射端的数据量。主题的情况下的数据倾斜也应该是有效的,前提是您的大量关键点在所有地图中相对一致。否则,少量的map会运行很长时间。