我正在尝试使用Java作为编程语言,了解Spark中reduceByKey
的工作原理。
假设我有一个句子“我是谁,我就是我”。
我将该句子分解为单词并将其存储为列表[I, am, who, I, am]
。
现在,该函数将每个单词分配为1
:
JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
});
因此,输出结果如下:
(I,1)
(am,1)
(who,1)
(I,1)
(am,1)
现在,如果我有三个reducer运行,每个reducer都会获得一个键和与该键关联的值:
reducer 1:
(I,1)
(I,1)
reducer 2:
(am,1)
(am,1)
reducer 3:
(who,1)
我希望了解:
a. 下面的函数到底发生了什么。
b. 参数new Function2<Integer, Integer, Integer>
是什么意思。
c. JavaPairRDD 是如何形成的。
JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
@Override
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
});
words.map((_, 1)).reduceByKey(_ + _)
。 - samthebest