我在存储在s3位置的hive中创建了一个表。它大约有10列,分为3列:月、年和市,顺序相同。
我正在运行一个spark作业,它创建一个Dataframe(20亿行)并写入这个表。
val partitions:Seq[Column] = Seq(col("month"),col("year"),col("city"))
df.repartition(partitions: _*).selectExpr(cs.map(_.name): _*).write.mode("overwrite").insertInto(s"$tableName")
selectexpr(cs.map(\u1.name):\u2*)对数据框中的列重新排序,以与表中的顺序对齐。
当我运行上面的命令插入到表中时,我看到在每个城市下创建了这么多临时文件和多个小文件。
s3://s3Root/tableName/month/year/city/file1.csv
file2.csv
...
file200.csv
我希望得到一个单一的文件下,每个城市每年每月。按分区合并。
预期:
s3://s3Root/tableName/month/year/city/file.csv
感谢您的帮助。
1条答案
按热度按时间icomxhvb1#
要按分区实现一个文件,应该使用
我认为您可以避免以前进行重新分区,如果您只执行分区方式,文件将按每个分区一个分区。