map算子:
接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果
RDD 中对应元素的值 map是一对一的关系
mapPartitions算子:和map结果一样,但比map效率高
map算子:RDD有多少元素执行多少次方法
mapPartitions算子:RDD有多少分区执行多少次方法
mapPartitions算子的参数,可查看博文
https://blog.csdn.net/qq_41712271/article/details/107637087
flatMap算子:
有时候,我们希望对某个元素生成多个元素,实现该功能的操作叫作 flatMap()
faltMap的函数应用于每一个元素,对于每一个元素返回的是多个元素组成的迭代器
例如我们将数据切分为单词 ,个人理解就是数据打散
map算子示例
JavaRDD<String> parallelize = javaSparkContext.parallelize(Arrays.asList("aa_bb", "cc_dd", "ee_ff"));
JavaRDD<String[]> map = parallelize.map(new Function<String, String[]>() {
@Override
public String[] call(String s) throws Exception {
return s.split("_");
}
});
map.foreach(new VoidFunction<String[]>() {
@Override
public void call(String[] strings) throws Exception {
System.out.println(Arrays.asList(strings));
}
});
返回的结果
[aa, bb]
[cc, dd]
[ee, ff]
FlatMap算子示例:
JavaRDD<String> parallelize = javaSparkContext.parallelize(Arrays.asList("aa_bb", "cc_dd", "ee_ff"));
JavaRDD<String> stringJavaRDD = parallelize.flatMap(new FlatMapFunction<String, String>() {
@Override
public Iterator<String> call(String s) throws Exception {
String[] s1 = s.split("_");
return Arrays.asList(s1).iterator();
}
});
System.out.println(stringJavaRDD.collect());
返回的结果:
[aa, bb, cc, dd, ee, ff]