spark/scala—在配置单元表中加载Dataframe的更快方法

wztqucjr  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(211)

我有一个Dataframe,我打算写一个配置单元分区表。我使用的代码是

for(i <- 0 until 10)
{
  myDf = hiveContext.sql("select * from srcTable where col = "+i)
  myDf.write.mode("append").format("parquet")
        .partitionBy("period_id").saveAsTable("myTable")
}
``` `myDf` 将在每次迭代中包含一组不同的数据(我刚刚展示了一种过于简单化的方法来获取值) `myDf` )
这个 `myDf.write` 加载120000行数据大约需要5分钟。我有没有办法进一步减少写这些数据的时间?
vsdwdz23

vsdwdz231#

首先,为什么要迭代而不是一次引导/保存所有数据?第二,我可以想象,如果你的代码写了太多(小)文件,你可以在文件系统上检查。通常,我会根据我用作Dataframe分区列的同一列重新划分Dataframe DataFrameWriter ,就像这样,每个分区只能得到1个文件(只要它不太大,否则hdfs会自动分割文件):

val cols = (0 until 10)

hiveContext.table("srcTable")
  .where($"col".isin(cols:_*))
  .repartition($"period_id")
  .write
  .format("parquet")
  .partitionBy("period_id")
  .saveAsTable("myTable")

除此之外,喜欢sparkui并检查任务的数量是否与执行者/核心的数量有合理的关系总是一个好主意。

相关问题