spark算子学习笔记

第一天学习

-------transformation
1、join,leftOuterJoin,rightOuterJoin,fullOuterJoin
作用在K,V格式的RDD上。根据K进行连接,对(K,V)join(K,W)返回(K,(V,W))
join后的分区数与父RDD分区数多的那一个相同。
2、union
   合并两个数据集。两个数据集的类型要一致。返回新的RDD的分区数是合并RDD分区数的总和。用在两个RDD的数据合并到一起做reduceByKey的操作。
3、intersection
取两个数据集的交集,会去重
4、subtract
取两个数据集的差集
5、mapPartition
与map类似,遍历的单位是每个partition上的所有数据。
6、distinct(map+reduceByKey+map)
7、cogroup   (This operation is also called groupWith.)
当调用类型(K,V)和(K,W)的数据上时,返回一个数据集(K,(Iterable<V>,Iterable<W>)),因为在同一个rdd里面,key值有可能相同
Key:1      vlaue:[bbb, ccc]----[B, C]


-------action
1、foreachPartition
遍历的数据是每个partition的数据。


第二天学习
-------transformation
1、mapPartitionWithIndex
类似于mapPartitions,除此之外还会携带分区的索引值。
2、repartition
增加或减少分区。常用来增多分区,会产生shuffle。(多个分区分到一个分区不会产生shuffle),底层源码调用的是(coalesce,shuffle=true)
3、coalesce
coalesce常用来减少分区,第二个参数是减少分区的过程中是否产生shuffle。
true为产生shuffle,false不产生shuffle。默认是false。如果coalesce设置的分区数比原来的RDD的分区数还多的话,第二个参数设置为false不会起作用,前面该条数据在哪个分区增多后也在同一个分区,增多的分区内容为空,如果设置成true,效果和repartition一样。即repartition(numPartitions) = coalesce(numPartitions,true)
4、groupByKey
作用在K,V格式的RDD上。根据Key进行分组。作用在(K,V),返回(K,Iterable <V>)。
5、zip
将两个RDD中的元素(KV格式/非KV格式)变成一个KV格式的RDD,两个RDD的个数必须相同。

        JavaRDD<String> nameRDD = sc.parallelize(Arrays.asList("zhangsan","lisi","wangwu"));
        JavaRDD<Integer> scoreRDD = sc.parallelize(Arrays.asList(100,200,300,400));
        JavaPairRDD<String, Integer> zip = nameRDD.zip(scoreRDD);
        zip.foreach(new VoidFunction<Tuple2<String,Integer>>() {
            private static final long serialVersionUID = 1L;

            @Override
            public void call(Tuple2<String, Integer> tuple) throws Exception {
                System.out.println("tuple --- " + tuple);
            }
        });

输出值为:tuple --- (zhangsan,100)
                  tuple --- (lisi,200)
                  tuple --- (wangwu,300)

call方法的参数类型会随着nameRDD和scoreRDD类型的改变而改变


6、zipWithIndex
该函数将RDD中的元素和这个元素在RDD中的索引号(从0开始)组合成(K,V)对。

JavaRDD<String> nameRDD = sc.parallelize(Arrays.asList("zhangsan","lisi","wangwu"));
JavaPairRDD<String, Long> zipWithIndex = nameRDD.zipWithIndex();
zipWithIndex.foreach(new VoidFunction<Tuple2<String,Long>>() {
    private static final long serialVersionUID = 1L;

    @Override
    public void call(Tuple2<String, Long> t) throws Exception {
        System.out.println("t ---- "+ t);
    }
});

输出值为:t ---- (zhangsan,0)
                 t ---- (lisi,1)
                 t ---- (wangwu,2)

call方法的二元组t的第二个值就是改元素在RDD中的索引号值


-------action
1、countByKey(会产生shuffle)
 作用到K,V格式的RDD上,根据Key计数相同Key的数据集元素。
2、countByValue
根据数据集每个元素相同的内容来计数。返回相同内容的元素对应的条数。
3、reduce
根据聚合逻辑聚合数据集中的每个元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值