spark常用RDD算子 - zipPartitions(),zip()

zipPartitions算子
zipPartitions函数将多个RDD按照partition组合成为新的RDD,
该函数需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求。

该算子scala版本和java版本,传递的参数不一样
scala版本:可以传一个rdd或两个rdd或3个rdd
java版本:参数 1为rdd,
                   参数2 为一个转换函数,如
interface FlatMapFunction2<T1, T2, R> extends Serializable {
Iterator<R> call(T1 var1, T2 var2) throws Exception;
}

zipPartitions算子 示例代码

List<Integer> data = Arrays.asList(5, 11, 1, 41, 4, 21, 2);
JavaRDD<Integer> javaRDD = javaSparkContext.parallelize(data,3);
System.out.println(javaRDD.glom().collect());
//javaRDD每个分区的数据如下 [[5, 11], [1, 41], [4, 21, 2]]


List<Integer> data1 = Arrays.asList(3, 2, 12, 5, 6);
JavaRDD<Integer> javaRDD1 = javaSparkContext.parallelize(data1,3);
System.out.println(javaRDD1.glom().collect());
//javaRDD1每个分区的数据如下 [[3], [2, 12], [5, 6]]


JavaRDD<String> stringJavaRDD = javaRDD.zipPartitions(javaRDD1, new FlatMapFunction2<Iterator<Integer>, Iterator<Integer>, String>() {

            @Override
            public Iterator<String> call(Iterator<Integer> integerIterator, Iterator<Integer> integerIterator2) throws Exception {
                LinkedList<String> linkedList = new LinkedList<String>();
                while (integerIterator.hasNext() && integerIterator2.hasNext())
                    linkedList.add(integerIterator.next().toString() + "_" + integerIterator2.next().toString());
                return linkedList.iterator();
            }
});

System.out.println(stringJavaRDD.collect());
//zipPartitions算子 返回的结果 [5_3, 1_2, 41_12, 4_5, 21_6]


zip算子
def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]
zip函数用于将两个RDD组合成Key/Value形式的RDD
这里默认两个RDD的partition数量以及各分区的元素数量都相同,否则会抛出异常

zip算子 代码示例

List<Integer> data = Arrays.asList(5, 11, 1, 41, 4, 21, 2);
JavaRDD<Integer> javaRDD = javaSparkContext.parallelize(data,3);
System.out.println(javaRDD.glom().collect());
//javaRDD结果 [[5, 11], [1, 41], [4, 21, 2]]

List<Integer> data1 = Arrays.asList(3, 2, 12, 5, 6,9,13);
JavaRDD<Integer> javaRDD1 = javaSparkContext.parallelize(data1,3);
System.out.println(javaRDD1.glom().collect());
//javaRDD1结果 [[3, 2], [12, 5], [6, 9, 13]]


JavaPairRDD<Integer, Integer> zip = javaRDD.zip(javaRDD1);

System.out.println(zip.collect());
//zip算子结果 [(5,3), (11,2), (1,12), (41,5), (4,6), (21,9), (2,13)]

System.out.println(zip.glom().collect());
//zip算子结果 [[(5,3), (11,2)], [(1,12), (41,5)], [(4,6), (21,9), (2,13)]]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值