Spark算子reduceByKey深度解析
来源:互联网 发布:网络错误代码1004 编辑:程序博客网 时间:2024/05/22 15:23
原文地址:http://blog.csdn.net/qq_23660243/article/details/51435257
--------------------------------------------
最近经常使用到reduceByKey这个算子,懵逼的时间占据多数,所以沉下心来翻墙上国外的帖子仔细过了一遍,发现一篇不错的,在此加上个人的理解整体过一遍这个算子,那么我们开始:
国外的大牛一上来给出这么一句话,个人感觉高度概括了reduceByKey的功能:
那么这就基本奠定了reduceByKey的作用域是key-value类型的键值对,并且是只对每个key的value进行处理,如果含有多个key的话,那么就对多个values进行处理。这里的函数是我们自己传入的,也就是说是可人为控制的【其实这是废话,人为控制不了这算子一点用没有】。那么举个例子:
scala> val x = sc.parallelize(Array(("a", 1), ("b", 1), ("a", 1), | ("a", 1), ("b", 1), ("b", 1), | ("b", 1), ("b", 1)), 3)
我们创建了一个Array的字符串,并把其存入Spark的集群上,设置了三个分区【这里我们不关注分区,只关注操作】。那么我们调用reduceByKey并且传入函数进行相应操作【本处我们对相同key的value进行相加操作,类似于统计单词出现次数】:
scala> val y = x.reduceByKey((pre, after) => (pre + after))这里两个参数我们逻辑上让他分别代表同一个key的两个不同values,那么结果想必大家应该猜到了:
scala> y.collectres0: Array[(String, Int)] = Array((a,3), (b,5))嗯,到这里大家对reduceByKey有了初步的认识和体会。论坛中有一段写的也很有帮助,由于英文不好怕翻译过来误导大家,所以每次附上原话:
看到这大家对这个算子应该有了更加深入的认识,那么再附上我的Scala的一个小例
子,同样是统计字母出现次数:
结果是:ArrayBuffer((a,3), (b,5)),很简单对吧。论坛给出了java和python的版本的,如下:
Java:
packagecom.backtobazics.sparkexamples;importjava.util.Arrays;importorg.apache.spark.api.java.JavaPairRDD;importorg.apache.spark.api.java.JavaRDD;importorg.apache.spark.api.java.JavaSparkContext;importorg.apache.spark.api.java.function.Function2;importscala.Tuple2;public classReduceByKeyExample { public static void main(String[] args) throws Exception { JavaSparkContext sc = new JavaSparkContext(); //Reduce Function for sum Function2<Integer, Integer, Integer> reduceSumFunc = (accum, n) -> (accum + n); // Parallelized with 2 partitions JavaRDD<String> x = sc.parallelize( Arrays.asList("a", "b", "a", "a", "b", "b", "b", "b"), 3); // PairRDD parallelized with 3 partitions// mapToPair function will map JavaRDD to JavaPairRDD JavaPairRDD<String, Integer> rddX = x.mapToPair(e -> newTuple2<String,Integer>(e, 1)); // New JavaPairRDD JavaPairRDD<String, Integer> rddY = rddX.reduceByKey(reduceSumFunc); //Print tuples for(Tuple2<String, Integer> element : rddY.collect()){ System.out.println("("+element._1+", "+element._2+")"); } }}// Output:// (b, 5)// (a, 3)python:
Bazic reduceByKey example in python# creating PairRDD x with key value pairs>>> x = sc.parallelize([("a", 1), ("b", 1), ("a", 1), ("a", 1),... ("b", 1), ("b", 1), ("b", 1), ("b", 1)], 3)# Applying reduceByKey operation on x>>> y = x.reduceByKey(lambda accum, n: accum + n)>>> y.collect()[('b', 5), ('a', 3)]# Define associative function separately >>>def sumFunc(accum, n):... return accum + n...>>> y = x.reduceByKey(sumFunc)>>> y.collect()[('b', 5), ('a', 3)]感谢大家捧场,客官慢走。
0 0
- Spark算子reduceByKey深度解析
- Spark算子reduceByKey深度解析
- spark--transform算子--reduceByKey
- Spark算子[07]:reduce,reduceByKey,count,countByKey
- Spark编程的基本的算子之:combineByKey,reduceByKey,groupByKey
- Spark中groupByKey与reduceByKey算子之间的区别
- 算子优化 reduceByKey
- ReduceByKey算子理解
- Spark算子:RDD键值转换操作(3)–groupByKey、reduceByKey、reduceByKeyLocally
- Spark算子:RDD键值转换操作(3)–groupByKey、reduceByKey、reduceByKeyLocally
- Spark算子:RDD键值转换操作(3)–groupByKey、reduceByKey、reduceByKeyLocally
- spark RDD算子(六)之键值对聚合操作reduceByKey,foldByKey,排序操作sortByKey
- [spark]groupbykey reducebykey
- spark ReduceByKey操作
- spark reduceByKey的小问题
- spark dataframe dataset reducebykey用法
- 大数据Spark “蘑菇云”行动第40课:Spark编程实战之aggregateByKey、reduceByKey、groupByKey、sortByKey深度解密
- Spark 算子
- mysql数据库 ibdata1瘦身
- 自定义注解(2)—定义和使用(利用反射获取)
- 文件压缩
- MySQL实体类转SQL脚本
- JZOJ3599【CQOI2014】排序机械臂
- Spark算子reduceByKey深度解析
- gulp基于seaJs模块化项目打包实践
- sku属性组合小例子
- 理论---jsp使用jspsmartupload组件实现文件上传功能
- [占坑]Codeforces Round #412 解题报告
- spring请求设置路径变量
- Ubuntu安装ssdb小记
- drop、truncate、delete
- 两种方式实现键盘录入