Spark RDD编程 双Value类型交互

Posted noyouth

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark RDD编程 双Value类型交互相关的知识,希望对你有一定的参考价值。

所谓双Value,就是两个数据集RDD之间进行操作。

1 union(otherDataset):对源RDD和参数RDD合并后返回一个新的RDD,不会去重

val listRDD1: RDD[Int] = sc.makeRDD(1 to 5)
val listRDD2: RDD[Int] = sc.makeRDD(5 to 10)

val union: Array[Int] = listRDD1.union(listRDD2).collect()
println(union.mkString(",")) //1,2,3,4,5,5,6,7,8,9,10

 

2 subtract (otherDataset):计算差的一种函数,去除两个RDD中相同的元素,不同的RDD将保留下来

 

val listRDD3: RDD[Int] = sc.makeRDD(1 to 8)
val listRDD4: RDD[Int] = sc.makeRDD(4 to 10)
val subtract: Array[Int] = listRDD3.subtract(listRDD4).collect()
println(subtract.mkString(",")) //1,2,3

 

 

3 intersection(otherDataset):对源RDD和参数RDD求交集后返回一个新的RDD

 

val listRDD5: RDD[Int] = sc.makeRDD(1 to 4)
val listRDD6: RDD[Int] = sc.makeRDD(2 to 6)
val intersection: Array[Int] = listRDD5.intersection(listRDD6).collect()
println(intersection.mkString(",")) //4,2,3

 

  

4 cartesian(otherDataset):笛卡尔积(尽量避免使用)

val listRDD7: RDD[Int] = sc.makeRDD(1 to 3)
val listRDD8: RDD[Int] = sc.makeRDD(4 to 6)
val cartesian: Array[(Int, Int)] = listRDD7.cartesian(listRDD8).collect()
println(cartesian.mkString(",")) //(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)

  

5 zip(otherDataset):将两个RDD组合成Key/Value形式的RDD,这里默认两个RDDpartition数量以及元素数量都相同,否则会抛出异常。

val listRDD9: RDD[Int] = sc.makeRDD(1 to 4, 3)
val listRDD10: RDD[Char] = sc.makeRDD(List(‘a‘, ‘b‘, ‘c‘, ‘d‘), 3)
val zip: Array[(Int, Char)] = listRDD9.zip(listRDD10).collect()
println(zip.mkString(",")) //(1,a),(2,b),(3,c),(4,d)

  

 

以上是关于Spark RDD编程 双Value类型交互的主要内容,如果未能解决你的问题,请参考以下文章

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

RDD的转换操作,分三种:单value,双value交互,(k,v)对

Spark 算子之map使用

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

spark算子 分为3大类

实验4 RDD编程初级实践