码迷,mamicode.com
首页 > 其他好文 > 详细

RDD转换算子--双value

时间:2020-06-07 15:12:37      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:怎么   必须   class   maker   cti   intersect   重复元素   zip   原来   

双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

标签:怎么   必须   class   maker   cti   intersect   重复元素   zip   原来   

原文地址:https://www.cnblogs.com/fyb-392/p/13060302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!