2024.6.6

更换了hadoop中的jdk的版本从1.8->17
rdd 行动算子 和 转换算子 序列化

 // TODO
        //    Spark在编写代码时,调用转换算子,并不会真正执行,因为只是在Driver端组合功能
        //    所以当前的代码其实就是在Driver端执行
        //    所以当前main方法也称之为driver方法,当前运行main线程,也称之Driver线程。
        //    转换算子中的逻辑代码是在Executor端执行的。并不会在Driver端调用和执行。
        //    RDD封装的逻辑其实就是转换算子中的逻辑
        final JavaRDD<Object> newRDD = rdd.map(num -> {
            System.out.println("******");
            return num * 2;
        });

        // TODO collect方法就是行动算子,会触发Job的执行
        //      collect方法就是将Executor端执行的结果按照分区的顺序拉取(采集)回到Driver端, 将结果组合成集合对象
        //      collect方法可能会导致多个Executor的大量数据拉取到Driver端,导致内存溢出,所以生成环境慎用
        final List<Object> collect = newRDD.collect();
        collect.forEach(System.out::println);

// TODO collect用于采集数据
        final List<Integer> collect = rdd.collect();
        // TODO count获取结果数量
        final long count = rdd.count();
        // TODO count获取结果的第一个
        final long first = rdd.first();
        // TODO take从结果中获取前N个
        final List<Integer> take = rdd.take(3);

// TODO foreach执行效率低,但是占内存比较小。
        rdd.foreach(
                num -> System.out.println(num)
        );
        System.out.println("**************************************");
        // TODO foreachPartition执行效率高,但是依托于内存大小。
        rdd.foreachPartition(
                list -> {
                    System.out.println(list);
                }
        );

 // TODO JDK1.8的函数式编程其实采用的是对象模拟出来的。
posted @ 2024-06-06 23:49  258333  阅读(6)  评论(0编辑  收藏  举报