spark常用RDD算子 - 键值对关联操作 subtractByKey, join,fullOuterJoin, rightOuterJoin, leftOuterJoin

subtractByKey

函数定义

def subtractByKey[W](other: RDD[(K, W)])(implicit arg0: ClassTag[W]): RDD[(K, V)]

def subtractByKey[W](other: RDD[(K, W)], numPartitions: Int)(implicit arg0: ClassTag[W]): RDD[(K, V)]

def subtractByKey[W](other: RDD[(K, W)], p: Partitioner)(implicit arg0: ClassTag[W]): RDD[(K, V)]

类似于subtrac,删掉 RDD 中键与 other RDD 中的键相同的元素


join

函数定义

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]

def join[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, W))]

def join[W](other: RDD[(K, W)], partitioner: Partitioner): RDD[(K, (V, W))]

RDD1.join(RDD2) 
可以把RDD1,RDD2中的相同的key给连接起来,类似于sql中的join操作


fullOuterJoin

和join类似,不过这是全连接


leftOuterJoin

def leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))]

def leftOuterJoin[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, Option[W]))]

def leftOuterJoin[W](other: RDD[(K, W)], partitioner: Partitioner): RDD[(K, (V, Option[W]))]

直接看图即可 
对两个 RDD 进行连接操作,类似于sql中的左外连接


rightOuterJoin

对两个 RDD 进行连接操作,类似于sql中的右外连接,存在的话,value用的Some, 不存在用的None,具体的看上面的图和下面的代码即可

 

JavaRDD<Tuple2<Integer,Integer>> rddPre = javaSparkContext.parallelize(Arrays.asList(new Tuple2(1,2)
                , new Tuple2(3,4)
                , new Tuple2(3,6)));
JavaRDD<Tuple2<Integer,Integer>> otherPre = javaSparkContext.parallelize(Arrays.asList(new Tuple2(3,10),
                new Tuple2(4,8)));

//JavaRDD转换成JavaPairRDD
JavaPairRDD<Integer, Integer> rdd = JavaPairRDD.fromJavaRDD(rddPre);
JavaPairRDD<Integer, Integer> other = JavaPairRDD.fromJavaRDD(otherPre);


JavaPairRDD<Integer, Integer> rdd1 = rdd.subtractByKey(other);
System.out.println(rdd1.collect());
//subtractByKey算子结果演示
//[(1,2)]


JavaPairRDD<Integer, Tuple2<Integer, Integer>> join = rdd.join(other);
//join算子结果演示
//[(3,(4,10)), (3,(6,10))]


JavaPairRDD<Integer, Tuple2<Optional<Integer>, Optional<Integer>>> fullOuterJoin = rdd.fullOuterJoin(other);
System.out.println(fullOuterJoin.collect());
//fullOuterJoin算子结果演示
//[(4,(Optional.empty,Optional[8])), (1,(Optional[2],Optional.empty)),
 (3,(Optional[4],Optional[10])), (3,(Optional[6],Optional[10]))]


JavaPairRDD<Integer, Tuple2<Integer, Optional<Integer>>> leftOuterJoin = rdd.leftOuterJoin(other);
System.out.println(leftOuterJoin.collect());
//leftOuterJoin算子结果演示
//[(1,(2,Optional.empty)), (3,(4,Optional[10])), (3,(6,Optional[10]))]


JavaPairRDD<Integer, Tuple2<Optional<Integer>, Integer>> rightOuterJoin = rdd.rightOuterJoin(other);
System.out.println(rightOuterJoin.collect());
//rightOuterJoin算子结果演示
//[(4,(Optional.empty,8)), (3,(Optional[4],10)), (3,(Optional[6],10))]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值