Action类算子也是一类算子(函数)叫做行动算子,如foreach,collect,count等。Transformations类算子是延迟执行,Action类算子是触发执行。一个application应用程序中有几个Action类算子执行,就有几个job运行。
reduce其实是讲RDD中的所有元素进行合并,当运行call方法时,会传入两个参数,在call方法中将两个参数合并后返回,而这个返回值回合一个新的RDD中的元素再次传入call方法中,继续合并,直到合并到只剩下一个元素时。
public static void reduce() { JavaRDD<String> rdd = jsc.textFile("words"); String reduce = rdd.flatMap(new FlatMapFunction<String, String>() { private static final long serialVersionUID = 1L; @Override public Iterable<String> call(String a) throws Exception { return Arrays.asList(a.split(" ")); } }).reduce(new Function2<String, String, String>() { private static final long serialVersionUID = 1L; @Override public String call(String a, String b) throws Exception { return a+"-->"+b; } }); System.out.println(reduce); }
将计算的结果作为集合拉回到driver端,一般在使用过滤算子或者一些能返回少量数据集的算子后,将结果回收到Driver端打印显示。
分布式环境下尽量规避,如有其他需要,手动编写代码实现相应功能就好。
详情请参考:https://blog.csdn.net/Fortuna_i/article/details/80851775
public static void collect() { JavaRDD<String> rdd = jsc.textFile("words"); List<String> collect = rdd.flatMap(new FlatMapFunction<String, String>() { private static final long serialVersionUID = 1L; @Override public Iterable<String> call(String a) throws Exception { return Arrays.asList(a.split(" ")); } }).collect(); for (String string : collect) { System.out.println(string); } }
返回一个包含数据集前n个元素的数组(从0下标到n-1下标的元素),不排序。
public static void take() { JavaRDD<String> rdd = jsc.textFile("words"); List<String> take = rdd.flatMap(new FlatMapFunction<String, String>() { private static final long serialVersionUID = 1L; @Override public Iterable<String> call(String a) throws Exception { return Arrays.asList(a.split(" ")); } }).take(5); for (String string : take) { System.out.println(string); } }
返回数据集的第一个元素(底层即是take(1))
public static void first() { JavaRDD<String> rdd = jsc.textFile("words"); String first = rdd.flatMap(new FlatMapFunction<String, String>() { private static final long serialVersionUID = 1L; @Override public Iterable<String> call(String a) throws Exception { return Arrays.asList(a.split(" ")); } }).first(); System.out.println(first); }
对于一个数据集进行随机抽样,返回一个包含num个随机抽样元素的数组,withReplacement表示是否有放回抽样,参数seed指定生成随机数的种子。
该方法仅在预期结果数组很小的情况下使用,因为所有数据都被加载到driver端的内存中。
返回数据集中元素个数,默认Long类型。
public static void count() { JavaRDD<String> rdd = jsc.textFile("words"); long count = rdd.flatMap(new FlatMapFunction<String, String>() { private static final long serialVersionUID = 1L; @Override public Iterable<String> call(String a) throws Exception { return Arrays.asList(a.split(" ")); } }).count(); System.out.println(count); }
原文:https://www.cnblogs.com/kpsmile/p/10440486.html