我有一个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分钟。我有没有办法进一步减少写这些数据的时间?
1条答案
按热度按时间vsdwdz231#
首先,为什么要迭代而不是一次引导/保存所有数据?第二,我可以想象,如果你的代码写了太多(小)文件,你可以在文件系统上检查。通常,我会根据我用作Dataframe分区列的同一列重新划分Dataframe
DataFrameWriter
,就像这样,每个分区只能得到1个文件(只要它不太大,否则hdfs会自动分割文件):除此之外,喜欢sparkui并检查任务的数量是否与执行者/核心的数量有合理的关系总是一个好主意。