Spark如何保证使用RDD、DataFrame和DataSet的foreach遍历时保证顺序执行

2021-04-27 14:33:30 浏览数 (1)

前言

spark运行模式 常见的有 local、yarn、spark standalone cluster 国外流行 mesos 、k8s 即使使用 local 模式,spark也会默认充分利用CPU的多核性能 spark使用RDD、DataFrame、DataSet等数据集计算时,天然支持多核计算 但是多核计算提升效率的代价是数据不能顺序计算 如何才能做到即使用spark数据集计算时又保证顺序执行?

1、重新分区

代码语言:javascript复制
.repartition(1).foreach

2、合并分区

代码语言:javascript复制
.coalesce(1).foreach

3、转换成数组

代码语言:javascript复制
.collect().foreach

4、设置并行度

代码语言:javascript复制
val spark = SparkSession.builder().config("spark.default.parallelist","1").getOrCreate()

5、设置单核

代码语言:javascript复制
val spark = SparkSession.builder().appName("").master("local[1]").getOrCreate()

推荐使用 repartition,coalesce 和 collect 可能会出现 oom 

速度固然重要,但解决问题才是根本! 

0 人点赞