0
我在地图上有一个值,我需要它是减少的第一个值。是否有可能我将这个值保存在hdfs中,然后我在setup()中读取它呢? 是否有可能在安装程序()中读取hdfs文件中的reduce?是否可以将属性从mapper传递给hadoop中的reducer?
我在地图上有一个值,我需要它是减少的第一个值。是否有可能我将这个值保存在hdfs中,然后我在setup()中读取它呢? 是否有可能在安装程序()中读取hdfs文件中的reduce?是否可以将属性从mapper传递给hadoop中的reducer?
这样做有多种方式:
对于选项#1,假设您有一个Text键和Text值从mapper传递到reducer。 而且你知道你的任何一把钥匙都不能以空格“”开头。所以你可以做的是构造一个特殊的键“”+#,其中#是一个reducer分区id(从0到N-1,其中N是你的reducer的总数)。然后在一个循环中输入“01”,“02”,“03”......这样的密钥,并输入你需要传递给每个reducer的值。 设置自定义partitioner,使其认识到“特殊”键和路线给对应分区:
int getPartition(Text key, Text value, int numPartitions) {
if (key.toString().startWith(" ") {
//special key
int partId = Integer.parseInt(key.toString().substring(1));
return partId;
} else {
//regular key
return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks;
}
}
显然,如果你有使用的密钥其他数据类型,你仍然可以创造性地想出了一个类似的逻辑。
谢谢您的回答。 :) –