为了账号安全,请及时绑定邮箱和手机立即绑定

【Spark Java API】Transformation(3)—union、intersection

标签:
Spark

union


官方文档描述:

Return the union of this RDD and another one. 
Any identical elements will appear multiple times (use `.distinct()` to eliminate them).

函数原型:

def union(other: JavaRDD[T]): JavaRDD[T]

**
union() 将两个 RDD 简单合并在一起,不改变 partition 里面的数据。RangeDependency 实际上也是 1:1,只是为了访问 union() 后的 RDD 中的 partition 方便,保留了原始 RDD 的 range 边界。
**

实例:

List<Integer> data = Arrays.asList(1,2,4,3,5,6,7);
JavaRDD<Integer> javaRDD = javaSparkContext.parallelize(data);
JavaRDD<Integer> unionRDD = javaRDD.union(javaRDD);
System.out.println("unionRDD~~~~~~~~~~~~~~~~~~~~~~" + unionRDD.collect());

intersection


官方文档描述:

Return the intersection of this RDD and another one. 
The output will not contain any duplicate elements, even if the input RDDs did.
Note that this method performs a shuffle internally.

函数原型:

def intersection(other: JavaRDD[T]): JavaRDD[T]

源码分析:

def intersection(other: RDD[T]): RDD[T] = withScope {this.map(v => (v, null)).cogroup(other.map(v => (v, null)))      
.filter { case (_, (leftGroup, rightGroup)) => leftGroup.nonEmpty && rightGroup.nonEmpty }      
.keys
}

**
先使用 map() 将 RDD[T] 转变成 RDD[(T, null)],这里的 T 只要不是 Array 等集合类型即可。接着,进行 a.cogroup(b)(后面会详细介绍cogroup)。之后再使用 filter() 过滤掉 [iter(groupA()), iter(groupB())] 中 groupA 或 groupB 为空的 records,得到 FilteredRDD。最后,使用 keys() 只保留 key 即可,得到 MappedRDD。
**

实例:

List<Integer> data = Arrays.asList(1, 2, 4, 3, 5, 6, 7);
JavaRDD<Integer> javaRDD = javaSparkContext.parallelize(data);
JavaRDD<Integer> intersectionRDD = javaRDD.intersection(javaRDD);
System.out.println(intersectionRDD.collect());



作者:小飞_侠_kobe
链接:https://www.jianshu.com/p/831ce043908e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消