Java apachesparkmapreduce解释

Java apachesparkmapreduce解释,java,apache-spark,Java,Apache Spark,我想知道这个小片段是如何工作的: 如果我有这段文字: 这是我的荣幸。Fusce quis suscipit ipsum。莫比维韦拉精英酒店 马莱苏阿达·佩伦茨克。这是我的荣幸。 整数aliquam faucibus neque id cursus。无主无主。福斯 pretium felis felis,malesuada felis blandit nec。前舌 埃尼姆,孕妇坐在阿梅特·斯克利斯克·埃吉特,门不在米。埃尼安维塔酒店 托尔托大肌,肌筋膜 这段代码计算了上面文本中每个单词的出现次数:

我想知道这个小片段是如何工作的:

如果我有这段文字:

这是我的荣幸。Fusce quis suscipit ipsum。莫比维韦拉精英酒店 马莱苏阿达·佩伦茨克。这是我的荣幸。 整数aliquam faucibus neque id cursus。无主无主。福斯 pretium felis felis,malesuada felis blandit nec。前舌 埃尼姆,孕妇坐在阿梅特·斯克利斯克·埃吉特,门不在米。埃尼安维塔酒店 托尔托大肌,肌筋膜

这段代码计算了上面文本中每个单词的出现次数:

        // Load  input data.
        JavaRDD<String> input = sc.textFile(inputFile);
        // Split up into words.
        JavaRDD<String> words = input.flatMap(new FlatMapFunction<String, String>() {
            public Iterable<String> call(String x) {
                return Arrays.asList(x.split(" "));
            }
        });
        // Transform into word and count.
        JavaPairRDD<String, Integer> counts = words.mapToPair(new PairFunction<String, String, Integer>() {
            public Tuple2<String, Integer> call(String x) {
                return new Tuple2(x, 1);
            }
        }).reduceByKey(new Function2<Integer, Integer, Integer>() {
            public Integer call(Integer x, Integer y) {
                return x + y;
            }
        });
//加载输入数据。
JavaRDD input=sc.textFile(inputFile);
//分成几个字。
JavaRDD words=input.flatMap(新的flatMap函数(){
公共Iterable调用(字符串x){
返回数组.asList(x.split(“”);
}
});
//转换成单词并计数。
JavaPairRDD counts=words.mapToPair(新的PairFunction(){
公共元组2调用(字符串x){
返回新的Tuple2(x,1);
}
}).reduceByKey(新功能2(){
公共整数调用(整数x,整数y){
返回x+y;
}
});
很容易理解,这条线

JavaRDD<String> words = input.flatMap(new FlatMapFunction<String, String>() {
                public Iterable<String> call(String x) {
                    return Arrays.asList(x.split(" "));
                }
            });
javarddwords=input.flatMap(新的flatMap函数(){
公共Iterable调用(字符串x){
返回数组.asList(x.split(“”);
}
});
创建包含按空格分割的整个单词的数据集

这一行给出了每个元组的值,例如:

JavaPairRDD<String, Integer> counts = words.mapToPair(new PairFunction<String, String, Integer>() {
                public Tuple2<String, Integer> call(String x) {
                    return new Tuple2(x, 1);
JavaPairRDD counts=words.mapToPair(新的PairFunction(){
公共元组2调用(字符串x){
返回新的Tuple2(x,1);
Ut,1
奎斯,1/继续

我对
reduceByKey
的工作原理以及它如何计算每个单词的出现次数感到困惑


提前感谢。

reduceByKey按键(每个元组中的第一个参数)对元组进行分组,并对每个组进行reduce

像这样:

(Ut,1),(quis,1),…,(quis,1),…,(quis,1),…mapToPair

               \            /             |                           reduceByKey
                      +
                 (quis, 1+1)              |
                       \                 /
                         \             /  
                                +
                            (quis, 2+1)

reduceByKey
按键(每个元组中的第一个参数)对元组进行分组,并对每个组进行reduce

像这样:

(Ut,1),(quis,1),…,(quis,1),…,(quis,1),…mapToPair

               \            /             |                           reduceByKey
                      +
                 (quis, 1+1)              |
                       \                 /
                         \             /  
                                +
                            (quis, 2+1)

reduceByKey
按键(每个元组中的第一个参数)对元组进行分组,并对每个组进行reduce

像这样:

(Ut,1),(quis,1),…,(quis,1),…,(quis,1),…mapToPair

               \            /             |                           reduceByKey
                      +
                 (quis, 1+1)              |
                       \                 /
                         \             /  
                                +
                            (quis, 2+1)

reduceByKey
按键(每个元组中的第一个参数)对元组进行分组,并对每个组进行reduce

像这样:

(Ut,1),(quis,1),…,(quis,1),…,(quis,1),…mapToPair

               \            /             |                           reduceByKey
                      +
                 (quis, 1+1)              |
                       \                 /
                         \             /  
                                +
                            (quis, 2+1)

reduceByKey
reduce
非常相似。它们都接受一个函数并使用它来组合值

reduceByKey
运行多个并行reduce操作,数据集中每个键对应一个操作,其中每个操作组合具有相同键的值

因为数据集可以有大量的键,
reduceByKey
不是作为向用户程序返回值的操作来实现的。相反,它返回一个新的RDD,由每个键和该键的缩减值组成


参考资料:学习火花-闪电般的大数据分析-第4章-使用键/值对。

reduceByKey
reduce
非常相似。它们都使用一个函数来组合值

reduceByKey
运行多个并行reduce操作,数据集中每个键对应一个操作,其中每个操作组合具有相同键的值

因为数据集可以有大量的键,
reduceByKey
不是作为向用户程序返回值的操作来实现的。相反,它返回一个新的RDD,由每个键和该键的缩减值组成


参考资料:学习火花-闪电般的大数据分析-第4章-使用键/值对。

reduceByKey
reduce
非常相似。它们都使用一个函数来组合值

reduceByKey
运行多个并行reduce操作,数据集中每个键对应一个操作,其中每个操作组合具有相同键的值

因为数据集可以有大量的键,
reduceByKey
不是作为向用户程序返回值的操作来实现的。相反,它返回一个新的RDD,由每个键和该键的缩减值组成


参考资料:学习火花-闪电般的大数据分析-第4章-使用键/值对。

reduceByKey
reduce
非常相似。它们都使用一个函数来组合值

reduceByKey
运行多个并行reduce操作,数据集中每个键对应一个操作,其中每个操作组合具有相同键的值

因为数据集可以有大量的键,
reduceByKey
不是作为向用户程序返回值的操作来实现的。相反,它返回一个新的RDD,由每个键和该键的缩减值组成


参考资料:学习火花-闪电般的大数据分析-第4章-使用键/值对。

请展示一下你是如何得到
Ut,1\nquis,1\n…。
?你是在打印还是写入文件或其他什么?我想是这样的,我没有打印任何东西。请展示一下你是如何得到
Ut,1\nquis,1\n。。。
?您是在打印还是写入文件或其他内容?我想是这样的,