【发布时间】:2019-12-28 18:58:28
【问题描述】:
我正在尝试使用 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)
现在,如果我有 3 个 reducer 正在运行,每个 reducer 都会获得一个键以及与该键关联的值:
reducer 1:
(I,1)
(I,1)
reducer 2:
(am,1)
(am,1)
reducer 3:
(who,1)
我想知道
一个。下面的函数中究竟发生了什么。
湾。参数是什么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;
}
});
【问题讨论】:
-
你的问题需要更具体,当你说“到底发生了什么”时,很难知道你想要什么样的解释。此外,您应该查看 Scala API,它比 Java 的 API 更加简洁和美观。您的代码变为:
words.map((_, 1)).reduceByKey(_ + _)
标签: java apache-spark