RDD转换算子--双value
Posted fyb-392
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RDD转换算子--双value相关的知识,希望对你有一定的参考价值。
双value
1) intersection
- 函数签名
def intersection(other: RDD[T]): RDD[T]
- 函数说明
对源RDD和参数RDD求交集后返回一个新的RDD 保留分区中中较大分区数
val dataRDD1 = sparkContext.makeRDD(List(1,2,3,4),3)
val dataRDD2 = sparkContext.makeRDD(List(3,4,5,6),4)
val dataRDD = dataRDD1.intersection(dataRDD2) //会生成4个分区 取较大分区
注意:两个RDD数据类型必须一致
2) union
- 函数签名
def union(other: RDD[T]): RDD[T]
- 函数说明
对源RDD和参数RDD求并集后返回一个新的RDD
数据合并,分区也会合并,原来每个集合两个分区,合并后为4个分区,合并其实就是将原来的分区合到一块,分区内数据不变
val dataRDD1 = sparkContext.makeRDD(List(1,2,3,4),2)
val dataRDD2 = sparkContext.makeRDD(List(3,4,5,6),3)
val dataRDD = dataRDD1.union(dataRDD2) //会生成5个分区
注意:两个RDD数据类型一致
3) subtract
- 函数签名
def subtract(other: RDD[T]): RDD[T]
- 函数说明
以一个RDD元素为主,去除两个RDD中重复元素,将其他元素保留下来。求差集
差集 : 数据被打乱重组, shuffle
当调用rdd的subtract方法时,以当前rdd的分区为主,所以分区数量等于当前rdd的分区数量
val dataRDD1 = sparkContext.makeRDD(List(1,2,3,4))
val dataRDD2 = sparkContext.makeRDD(List(3,4,5,6))
val dataRDD = dataRDD1.subtract(dataRDD2)
注意:两个RDD数据类型必须一致
4) zip
- 函数签名
def zip[U: ClassTag](other: RDD[U]): RDD[(T, U)]
- 函数说明
将两个RDD中的元素,以键值对的形式进行合并。其中,键值对中的Key为第1个RDD中的元素,Value为第2个RDD中的元素。
元素个数 和 分区数 必须一致 类型可以不同 但是分区数元素数必须一致
val dataRDD1 = sparkContext.makeRDD(List(1,2,3,4))
val dataRDD2 = sparkContext.makeRDD(List(3,4,5,6))
val dataRDD = dataRDD1.zip(dataRDD2)
思考一个问题:如果两个RDD数据类型不一致怎么办?
没有问题,可以进行拉链。
思考一个问题:如果两个RDD数据分区不一致怎么办?
如果数据分区不一致,会发生错误
思考一个问题:如果两个RDD分区数据数量不一致怎么办?
如果数据分区中数据量不一致,也会发生错误。
以上是关于RDD转换算子--双value的主要内容,如果未能解决你的问题,请参考以下文章