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

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 data = Arrays.asList(1,2,4,3,5,6,7);

JavaRDD javaRDD = javaSparkContext.parallelize(data);

JavaRDD 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 data = Arrays.asList(1, 2, 4, 3, 5, 6, 7);

JavaRDD javaRDD = javaSparkContext.parallelize(data);

JavaRDD intersectionRDD = javaRDD.intersection(javaRDD);

System.out.println(intersectionRDD.collect());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值