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的函数式编程其实采用的是对象模拟出来的。