[Spark--PairRDDFunctions]--combineByKey的解释
来源:互联网 发布:java开源社区 编辑:程序博客网 时间:2024/06/07 17:33
原文:https://www.edureka.co/blog/apache-spark-combinebykey-explained
供稿人:Prithviraj Bose
这是Spark中强大的API,它是 combineByKey。
Scala API: org.apache.spark.PairRDDFunctions.combineByKey。
Python API: pyspark.RDD.combineByKey。
该API需要三个函数(如 Python中的lambda表达式 或 Scala中的匿名函数),即
- 创建组合函数:x
- 合并值函数:y
- 合并组合函数:z
API格式是 combineByKey(x,y,z)。
我们来看一个例子(在Scala中)。完整的Scala源代码可以在这里找到。
我们的目标是找到每个学生的平均分数。
这是一个占位符类 ScoreDetail, 用于存储学生姓名以及主题的分数。
生成一些测试数据并将其转换为密钥对值,其中 key = Students name 和 value = ScoreDetail 实例。
然后我们创建一个Pair RDD,如下面的代码片段所示。为了进行实验,我创建了一个大小为3的散列分区器,因此这三个分区将分别包含2个,2个和4个键值对。这在我们探索每个分区的部分中突出显示。
现在我们可以探索每个分区。第一行打印每个分区的长度(每个分区的键值对的数量),第二行打印每个分区的内容。
这里是最后的转换,我们计算每个学生的平均分数,然后在分区中合并分数。
上面的代码流程如下:
首先,我们需要创建一个组合器函数,对于每个分区中遇到的每个Key,本质上都是一个元组= =(value,1)。在此阶段之后,分区中每个(key,value)的输出都是(key,(value,1))。
然后在下一次迭代中,每个分区的组合函数被合并使用每个键的合并值函数。在这个阶段之后,每个分区的输出(key,(value,1))是(key,(total,count))。
最后,合并组合器函数合并执行器中分区的所有值,并将数据发送回驱动程序。在此阶段之后,每个分区的每个(key,(总数,计数))的输出是
(key,(totalAcrossAllPartitions,countAcrossAllPartitions))。
该map 转换将
(key,tuple)=(key,(totalAcrossAllPartitions,countAcrossAllPartitions))
转换为(key,tuple._1 / tuple._2)计算每个键的平均值。
最后一行输出driver结束时所有学生的平均分数。
参考:
1、Spark RDD操作 :http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html#combineByKey
2、GitHub举例: https://github.com/prithvirajbose/spark-dev/blob/master/src/main/scala/examples/TestCombineByKey.scala
3、Python api举例: http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD
4、Scala api举例: http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions
- [Spark--PairRDDFunctions]--combineByKey的解释
- Spark PairRDDFunctions flatMapValues
- Spark中的combineByKey
- Spark函数讲解:combineByKey
- Spark-聚合操作-combineByKey
- Spark combinebykey使用示例
- Spark 核心算子:combineByKey()
- spark 算子combineByKey 详解
- Spark编程的基本的算子之:combineByKey,reduceByKey,groupByKey
- Spark RDD中Transformation的combineByKey、reduceByKey,join详解
- Spark算子篇-combineByKey实战
- spark学习之combineByKey函数
- Spark RDD算子【三】combineByKey
- Spark之combineByKey详解Java
- spark中算子详解:combineByKey
- Spark算子[08]:combineByKey详解
- RDD的CombineBykey
- 请教Spark 中 combinebyKey 和 reduceByKey的传入函数参数的区别?
- Python建立本地服务器
- 指针和数组相关运算
- valueOf()方法
- JavaWeb自主学习--css(一),day2
- Linux多线程之基本编程
- [Spark--PairRDDFunctions]--combineByKey的解释
- 安装paramiko时遇到error in cryptography setup command: Invalid environment marker: python_version < '3'
- QString 中不要出现括号什么的乱七八糟符号,compare时会不等
- 我所理解的生成器(关键词:生成器对象/生成器/生成器表达式/生成器函数/生成器类/generator/yield/__iter__)
- siebel escript入门——基础知识一
- 如何真正的删除node及npm所有指令
- Aras Innovator: 如何在Form中放入图片
- 牛客练习赛8 A约数个数的和 【数论水题】
- 在Centos6.8环境下安装tomcat并成功启动后无法进入首页界面的解决办法