标签:怎么 必须 class maker cti intersect 重复元素 zip 原来
双value
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数据类型必须一致
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数据类型一致
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数据类型必须一致
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分区数据数量不一致怎么办?
如果数据分区中数据量不一致,也会发生错误。
标签:怎么 必须 class maker cti intersect 重复元素 zip 原来
原文地址:https://www.cnblogs.com/fyb-392/p/13060302.html