典型的:减少使用资源,拉长运行时间
递进程序
val sparkSession= SparkSession.builder().master("local").appName("AppName").getOrCreate()
val dataArray = "10450013、3593084 、13568083、32456733、78783125、5689865、23459806".split("、")
for(index <- dataArray){
val path = "/data/"+index
sparkSession.read.json(path).//逻辑代码
}
1.使用最少的资源
2.前后有依赖的任务适合
1.运行时间最长
使用多倍的资源,减少运行的时间。这种方法在sparkUI界面上看是同时有多个job在运行的。
递进程序
val sparkSession= SparkSession.builder().master("local").appName("AppName").getOrCreate()
val dataArray = "10450013、3593084 、13568083、32456733、78783125、5689865、23459806".split("、")
val executorService = Executors.newFixedThreadPool(5)
1.运行时间是方法一的1/N。
1.使用的资源是方法一的N倍。
2.没有办法确定运行结束的顺序
3.前后有依赖的任务不适合
生成的目录是根据
partitionBy("colmn")的值确定的,也可以写多个partitionBy("colmn"),这样就生成了多级目录
val dataArray = "10450013、3593084 、13568083、32456733、78783125、5689865、23459806".split("、")
sparkSession.read.json(dataArray.map(x=>("/data/"+x)):_*)
.write.partitionBy("colmn").csv("")
最好能确定多个文件之间的大小差不多,要不然容易文件倾斜。
sparksql系列(九) spark多job提交,spark多目录处理
原文:https://www.cnblogs.com/wuxiaolong4/p/13196602.html