簡體   English   中英

僅覆蓋分區 spark 數據集中的某些分區

[英]Overwrite only some partitions in a partitioned spark Dataset

我們如何覆蓋分區數據集,但只覆蓋我們要更改的分區? 比如重新計算上周的日常作業,只覆蓋上周的數據。

默認的 Spark 行為是覆蓋整個表,即使只有一些分區將被寫入。

從 Spark 2.3.0 開始,這是覆蓋表時的一個選項。 要覆蓋它,您需要將新的spark.sql.sources.partitionOverwriteMode設置設置為dynamic ,需要對數據集進行分區,並且寫入模式overwrite Scala 中的示例:

spark.conf.set(
  "spark.sql.sources.partitionOverwriteMode", "dynamic"
)
data.write.mode("overwrite").insertInto("partitioned_table")

我建議在寫入之前根據您的分區列進行重新分區,這樣每個文件夾最終不會有 400 個文件。

在 Spark 2.3.0 之前,最好的解決方案是啟動 SQL 語句刪除這些分區,然后使用模式追加寫入它們。

僅供參考,對於 PySpark 用戶,請確保在insertInto設置overwrite=True否則模式將更改為append

源代碼

def insertInto(self, tableName, overwrite=False):
    self._jwrite.mode(
        "overwrite" if overwrite else "append"
    ).insertInto(tableName)

這是如何使用它:

spark.conf.set("spark.sql.sources.partitionOverwriteMode","DYNAMIC")
data.write.insertInto("partitioned_table", overwrite=True)

或者在 SQL 版本中工作正常。

INSERT OVERWRITE TABLE [db_name.]table_name [PARTITION part_spec] select_statement

醫生看這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM