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的主要内容,如果未能解决你的问题,请参考以下文章

Spark-Core RDD转换算子-双Value型交互

Spark之RDD算子-转换算子

Spark-RDD 转换算子(Value 类型)

Spark-Core RDD转换算子-Value型

Spark 算子之map使用

spark算子 分为3大类