RDD的集合运算

现在假设有两个RDD,分别包含{1,2,3,3}和{3,4,5}。首先,让我们构造出这两个RDD:

// 构造这两个RDD
val rdd1 = sc.parallelize(List(1,2,3,3))
rdd1.collect

val rdd2 = sc.parallelize(List(3,4,5))
rdd2.collect

接下来操作这两个RDD,如下。

union(otherDataset)

合并两个rdd,并集。

val rdd3 = rdd1.union(rdd2)
rdd3.collect

intersection(otherDataset)

交集。只保留在两个rdd中都有的元素。

val rdd4 = rdd1.intersection(rdd2)
rdd4.collect

subtract转换

差集。只保留在第一个rdd中有而在第二个rdd中没有的元素。

val rdd5 = rdd1.subtract(rdd2)
rdd5.collect

cartesian(otherDataset)

两个rdd的笛卡尔集。

当在类型为T和U的RDD上调用时,返回一个(T, U)对(所有元素对)的RDD。

val rdd6 = rdd1.cartesian(rdd2)
rdd6.collect

zip(other)

当在类型为T和U的RDD上调用时,返回一个(T, U)对的RDD,其中元组第一个元素来自第一个RDD,第二个元素来自第二个RDD。这类似于拉链操作。假设两个RDD具有相同数量的分区和每个分区中相同数量的元素(例如,一个RDD通过另一个RDD上的map生成)。

val rdd1 = spark.sparkContext.parallelize(Array("aa","bb","cc"))
val rdd2 = spark.sparkContext.parallelize(Array(1,2,3))

val rdd3 = rdd1.zip(rdd2)
rdd3.collect			// Array((aa,1), (bb,2), (cc,3))

《PySpark原理深入与编程实战》