6.5

rdd map filter flatmap groupby distinct sortby

  // TODO map方法的作用就是将传入的A转换为B返回,但是没有限制A和B的关系。
        final JavaRDD<Integer> newRDD1 = rdd.map(
                num -> {
                    System.out.println("@" + num);
                    return num;
                }
        );

 // TODO RDD的转换方法:filter(过滤)
        //      RDD可以根据指定的过滤规则对数据源中的数据进行筛选过滤
        //      如果满足规则(返回结果true),那么数据保留,如果不满足规则(返回结果false),那么数据就会丢弃


// TODO RDD的转换方法:flatmap (扁平映射)
        //      flat(数据扁平化) + map(映射)
        final JavaRDD<Integer> flatMapRDD = rdd.flatMap(new FlatMapFunction<List<Integer>, Integer>() {
            @Override
            public Iterator<Integer> call(List<Integer> list) throws Exception {
                List<Integer> nums = new ArrayList<>();
                list.forEach(
                        num -> nums.add(num * 2)
                );
                return nums.iterator();
            }


 // TODO RDD的方法:groupBy,按照指定的规则对数据进行分组
        rdd.groupBy(new Function<Integer, Object>() {
            @Override
            public Object call(Integer num) throws Exception {
                // 返回的值其实就是数据对应的组的名称,相同组的名称的数据会放置在一个组中
                // 当前的逻辑就是给数据增加标记
                // 1 -> B
                // 2 -> B
                // 3 -> B
                // 4 -> B
                return "b"; // 组的名称, 此处需要实现分组逻辑
            }
        })
        // 逻辑执行完毕后,打印的结果只有一行 (a, [1,2,3,4]),
                // 一行数据就表示一个组,组的名称就是a,组内的数据就是1,2,3,4
        .collect().forEach(System.out::println);


 // TODO distinct : 去重
        //      hashSet去重,是单点去重
        //      distinct ,是分布式去重, 采用了分组+shuffle的处理方式
        rdd.distinct().collect().forEach(System.out::println);
posted @ 2024-06-05 23:36  258333  阅读(13)  评论(0编辑  收藏  举报