pyspark与hive,append将添加到现有分区并复制数据

krcsximq  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(334)

我目前正在使用adwords api,我必须处理1天、7天和30天的数据。因此,spark作业是基本的,加载csv并将其写入带有分区的parquet中:

  1. df.write
  2. .mode("append")
  3. .format("parquet")
  4. .partitionBy("customer_id", "date")
  5. .option("path", warehouse_location+"/"+table)
  6. .saveAsTable(table)

现在我面临的问题是,7天和30天将在某个时间点(通过1天前)处理已经处理的数据,从而在我的分区上 table/customer_id/date/file.parquet append将把第二个Parquet文件追加到此分区。
但是在这个特定的情况下,我希望新的Parquet文件覆盖上一个文件(因为adwords csv会在生成的第一天到7/30天后发生变化)。
我环顾四周,如果我尝试使用“overwrite”,它将覆盖整个表,而不仅仅是分区。
你对如何在这里进行有什么建议吗?
我不是一个sparkMaven,现在我唯一的选择就是有一个脚本,可以根据文件时间戳来清理这个地方。但这似乎不是正确的解决方案。
ps:我用的是spark 2.4

vsmadaxz

vsmadaxz1#

根据spark-20236,你应该 spark.sql.sources.partitionOverwriteMode="dynamic" 属性,然后使用 "overwrite" 模式来替换现有表中的各个分区。

相关问题