我目前正在使用adwords api,我必须处理1天、7天和30天的数据。因此,spark作业是基本的,加载csv并将其写入带有分区的parquet中:
df.write
.mode("append")
.format("parquet")
.partitionBy("customer_id", "date")
.option("path", warehouse_location+"/"+table)
.saveAsTable(table)
现在我面临的问题是,7天和30天将在某个时间点(通过1天前)处理已经处理的数据,从而在我的分区上 table/customer_id/date/file.parquet
append将把第二个Parquet文件追加到此分区。
但是在这个特定的情况下,我希望新的Parquet文件覆盖上一个文件(因为adwords csv会在生成的第一天到7/30天后发生变化)。
我环顾四周,如果我尝试使用“overwrite”,它将覆盖整个表,而不仅仅是分区。
你对如何在这里进行有什么建议吗?
我不是一个sparkMaven,现在我唯一的选择就是有一个脚本,可以根据文件时间戳来清理这个地方。但这似乎不是正确的解决方案。
ps:我用的是spark 2.4
1条答案
按热度按时间vsmadaxz1#
根据spark-20236,你应该
spark.sql.sources.partitionOverwriteMode="dynamic"
属性,然后使用"overwrite"
模式来替换现有表中的各个分区。