我有一个问题。根据最大值计算Hadoop
我想对大数据集进行映射,映射过程取决于最大值。
例如
Input:
(key) (value)
--------------
key1 1
key2 2
key3 5
key4 6
key5 9
我的计算取决于这些值的最大值,以每个点映射。 我想根据值中的最大值将这些值分组。
例如,上一个输入的最大数量是9,我想将它们映射到3个组。我将使用新密钥:(int) value/(Max/3)
。
output(of mapping)
(new key) (new Value)
----------------------
0 key1
0 key2
1 key3
1 key4
2 key5
而且我有以下映射:
protected void map(Object key, InWritable value, Context context)
throws IOException, InterruptedException {
int MaximumValue=???;
int newKey = (int)value/(MaximumValue/3);
context.write(newKey,Key);
}
但是,如何计算的最大关键,遍历所有记录过吗?
你不能,你需要在reduce函数中做那个部分。 在缩减器中,当所有映射器值合并在一起时,只有您可以找到最大密钥。 –
谢谢穆克什,但你的意思是我应该两个链接工作?第一个将找到最大值,第二个工作将分组? –
是的。这是正确的。 你能告诉我这行是干什么**(int)值/(最大/ 3)**。 因为我认为这行不会帮你创建3组。 –