我正在Apache Spark 1.6.3中写入分区的外部配置单元格(格式为实木复合地板)。我想为每个分区写1个文件(数据很小,我想避免许多小文件的开销)。假设分区列为date
。我可以这样做:
df
.coalesce(1)
.write.mode("overwrite").partitionBy("date")
.insertInto(newTable)
但这使得insertInto
阶段只有1个任务,尽管创建了许多不同的文件。那么为什么不使用多个任务来编写文件而不是使用1个任务来编写所有文件。
另一方面,如果省略coalesce(1)
,每个hive分区会收到大量的小文件。
那么如何加快上述代码呢?或者更一般地说,如何控制插入Hive表时创建的文件数量(不使用coalesce(1)
)?