前言


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


1、重新分区

.repartition(1).foreach

2、合并分区

.coalesce(1).foreach

3、转换成数组

.collect().foreach

4、设置并行度

val spark = SparkSession.builder().config("spark.default.parallelist","1").getOrCreate()

5、设置单核

val spark = SparkSession.builder().appName("").master("local[1]").getOrCreate()

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

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