在 Scala 中并行写入 2 个数据帧



例如我正在做很多计算我终于下来了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")
通常,在

驱动程序代码中使用多线程没有任何好处,但有时它可以提高性能。我遇到过一些启动并行 spark 作业会大大提高性能的情况,即当单个作业不能很好地利用集群资源时(例如,由于数据倾斜、分区太少等)。在您的情况下,您可以执行以下操作:

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)
}

相关内容

  • 没有找到相关文章

最新更新