Apache Spark实战教程(三):两个RDD求交集 差集 并集

一.前言

spark中两个rdd,经常需要做交集,差集,并集等操作。好比任何一门编程语言中两个集合,交并差也是常见的需求。现在我们看看在spark中怎么实现两个rdd的这种操作。
为了方便看到结果,在spark shell中测试如下代码。

生成两个RDD

scala> val rdd1 = sc.parallelize(List("a", "b","c"))
rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[5] at parallelize at <console>:27

scala> val rdd2 = sc.parallelize(List("e", "d","c"))
rdd2: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[6] at parallelize at <console>:27

二.求并集,union操作

如果是要求并集,用union操作

scala> rdd1.union(rdd2).collect
...
res5: Array[String] = Array(a, b, c, e, d, c)

可以看出,union的结果是没有去重的,就是将rdd1与rdd2的元素放一块。如去重请用distinct

scala> rdd1.union(rdd2).distinct.collect
...
res6: Array[String] = Array(a, b, c, d, e)

三.求交集,intersection操作

求两个交集也是常见的需求。很简单,用intersection操作就可以了。

scala> rdd1.intersection(rdd2).collect
...
res7: Array[String] = Array(c)

scala> rdd2.intersection(rdd1).collect
...
res9: Array[String] = Array(c)

四.求差集,subtract

subtract的方法原型为:

def subtract(other: RDD[T]): RDD[T]

该函数类似于intersection,返回在RDD中出现,并且不在otherRDD中出现的元素,不去重。

scala> rdd1.subtract(rdd2).collect
...
res10: Array[String] = Array(a, b)

scala> rdd2.subtract(rdd1).collect
...
res11: Array[String] = Array(d, e)

这几个方法都很实用,使用起来也简单快捷,希望能对大家有所帮助。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值