在scala中并行编写2个数据帧

时间:2017-10-25 00:20:19

标签: scala apache-spark spark-dataframe

例如 我正在做很多计算 我终于到了 3个数据帧。

例如:

val mainQ = spark.sql("select * from employee")
mainQ.createOrReplaceTempView("mainQ")
val mainQ1 = spark.sql("select state,count(1) from mainQ group by state")
val mainQ2 = spark.sql("select dept_id,sum(salary) from mainQ group by dept_id")
val mainQ3 = spark.sql("select  dept_id,state , sum(salary) from mainQ     group by dept_id,state")
//Basically I want to write below writes in parallel. I could put into 
//Different files. But that is not what I am looking at. Once all         computation is done. I want to write the data in parallel.
mainQ1.write.mode("overwrite").save("/user/h/mainQ1.txt")
mainQ2.write.mode("overwrite").save("/user/h/mainQ2.txt")
mainQ3.write.mode("overwrite").save("/user/h/mainQ3.txt")

1 个答案:

答案 0 :(得分:0)

通常在驱动程序代码中使用多线程没有任何好处,但有时它可以提高性能。在某些情况下,启动并行火花作业会大大提高性能,即当各个作业不能很好地利用群集资源时(例如,由于数据偏差,分区太少等)。在你的情况下,你可以这样做:

ParSeq(
  (mainQ1,"/user/h/mainQ1.txt"),
  (mainQ2,"/user/h/mainQ2.txt"),
  (mainQ3,"/user/h/mainQ3.txt")
).foreach{case (df,filename) => 
  df.write.mode("overwrite").save(filename)
}