用覆盖写入空的Spark数据帧会删除所有现有分区

时间:2019-10-30 18:20:36

标签: dataframe apache-spark hadoop amazon-s3 pyspark

Spark删除所有现有分区,同时覆盖覆盖写入空数据帧。

下面有一个代码可以将数据写入每天运行的s3。

这在有新分区值时动态添加新分区,但是当数据框为空时,它将删除所有分区。

我必须在此处使用“覆盖”,以避免重复数据。 (没有附加选项)

df.write
      .partitionBy("year", "month", "day")
      .mode("overwrite")
      .parquet("s3://..../table1/")

我可以在写入之前检查数据帧是否为空,但这会增加开销。

我觉得这种行为很奇怪,因为覆盖应该只覆盖匹配的分区。

处理这种情况的正确方法是什么?

  

注意:   此问题与以下问题不同,因为我的问题特定于空数据框并写入S3(而不是任何表),并且以下问题的解决方案不起作用,因为属性“ spark.sql.sources.partitionOverwriteMode”为已经设置为“动态”。

overwrite hive partitions using spark

0 个答案:

没有答案