带有Hive的pyspark,追加将添加到现有分区并复制数据

时间:2019-09-18 14:58:32

标签: apache-spark hive pyspark

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

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上,追加将追加第二个镶木文件到这个分区。

但是在这种情况下,我希望新的实木复合地板文件覆盖以前的实木复合地板文件(因为adwords csv可能会在生成的第一天和7/30天之后发生变化)。

我环顾四周,如果我尝试使用“覆盖”,它将覆盖整个表,而不仅仅是分区。

您对如何进行此处有任何建议吗?

我不是Spark专家,现在我唯一的选择是拥有一个脚本,该脚本将根据文件时间戳清除该位置。但这不适合这里的解决方案。

PS:我正在使用Spark 2.4

1 个答案:

答案 0 :(得分:1)

基于SPARK-20236,应设置spark.sql.sources.partitionOverwriteMode="dynamic"属性,然后使用"overwrite"模式替换现有表中的各个分区。