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))