java实现spark常用算子之mapPartitionsWithIndex
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.VoidFunction; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List; /**
* mapPartitionsWithIndex算子:
* 与mapPartitions相似,可以看见使用到了哪一个partitions
*
* mapPartitions第二个参数preservesPartition(boolean,默认为false)的含义:
* 此标志用于优化目的,当您不修改分区时,将它设置为false,
* 如果您需要修改分区时,将它设置为true,这样spark可以更有效地执行操作,
* 但如果您不告诉spark,它无法知道你的目的,也将无法达到优化的目的。
*
* 采用分区的话:parallelize优先级最高,其次是conf.set,最后是local[]
*/
public class MapPartitionsWithIndexOperator { public static void main(String[] args){
SparkConf conf = new SparkConf().setMaster("local").setAppName("mapPartitionsWithIndex");
JavaSparkContext sc = new JavaSparkContext(conf); List<String> names = Arrays.asList("w1","w2","w3","w4","w5","W6","W7"); //将list转为RDD并且分为2个partition
JavaRDD<String> nameRDD = sc.parallelize(names,2); // Function2入参:第一个参数为partition的index,第二个为入参,第三个为返回值
JavaRDD<String> resultRDD = nameRDD.mapPartitionsWithIndex(new Function2<Integer, Iterator<String>, Iterator<String>>() {
@Override
public Iterator<String> call(Integer integer, Iterator<String> iterator) throws Exception {
List<String> nameList = new ArrayList<>();
while (iterator.hasNext()){
nameList.add(integer+":"+iterator.next());
}
return nameList.iterator();
}
},true); //修改sparkRDD分区
JavaRDD<String> repartitionRDD = resultRDD.repartition(4);
System.err.println(repartitionRDD.partitions().size()); repartitionRDD.foreach(new VoidFunction<String>() {
@Override
public void call(String s) throws Exception {
System.err.println("mapPartitionsWithIndex:"+s);
}
}); }
} 微信扫描下图二维码加入博主知识星球,获取更多大数据、人工智能、算法等免费学习资料哦!
java实现spark常用算子之mapPartitionsWithIndex的更多相关文章
- java实现spark常用算子之Repartitions
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之coalesce
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之Union
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之TakeSample
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之SaveAsTextFile
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之map
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之intersection
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之frist
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java实现spark常用算子之flatmap
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
随机推荐
- 性能优化 | Tomcat和JVM的性能调优总结
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- P1439 【模板】最长公共子序列 LCS
P1439 [模板]最长公共子序列 题解 1.RE的暴力DP O(n2) 我们设dp[i][j]表示,S串的第i个前缀和T串的第j个前缀的最长公共子序列. ◦ 分情况: ◦ ...
- easyUI之Messager(消息窗口)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- ES 可视化工具
1.ElasticSearch Head 用途:展示ES(集群)数据信息 视图:https://mobz.github.io/elasticsearch-head/ 下载:https://github ...
- hive常用的字符串操作函数
- Spring源码整理
转载:https://www.cnblogs.com/ITtangtang/p/3978349.html 感谢博主
- Python-sympy科学计算与数据处理(求极限及其它功能)
极限 其它功能
- linux中查找命令find、locate、whereis、which、type的区别
find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/var/lib/locatedb)文件不同,find查找的是磁盘空间. locate locate命令其实 ...
- PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换
本篇文章主要介绍了PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换 超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软件准备 软 ...
- AttributeError: module 'unittest' has no attribute 'TestCase'
一个自己给自己挖的坑 大家千万不要用库的名称命名,特别是刚刚入门的时候.文件夹.文件,都不要用库的名称. 一旦与库重名,就会出现这种 AttributeError. 引以为戒,以后我再这么命名,我就是 ...
