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);