場景:我有一個dataframe有50億條記錄/行和100 +列。有辦法有效地編寫這個三角洲的格式。我試圖出口,但取消後2小時(寫不完),這個處理時間不是不可接受的業務代表。到目前為止我所做的是出口使用這種語法行。我使用Python順便說一句。
dataframe_name.repartition (50) .write.partitionBy(<可樂>、< colB >) .format .mode(“δ”)(“覆蓋”)。選項(“overwriteSchema”,“真正的”).save (< StoragePathLocation >)
集群配置:
Standard_DS4_V2 - 28 gb Mem 8核
是的,流你仍然可以通過Azure數據工廠來運行它。隻是如果你想無限期地流你不能使用進度和需要處理可能的失敗。如果你想設置流完成(超時)一段時間後,你可以設置時間表(例如超時後23.9小時,每天運行)。事實上每個案件都是不同的。
這是一次操作或你想寫這50億條記錄定期嗎?
如果是一次操作可以使用優化的三角洲湖寫道:
設置spark.databricks.delta.properties.defaults.autoOptimize.optimizeWrite = true;
設置spark.databricks.delta.properties.defaults.autoOptimize.autoCompact = true;
這樣的分區大小自動處理,可以ommit重新分區(50)。
因為這個再分配將導致大量的打亂。
還要檢查如果你需要overwriteschema選項。我不確定是否有性能影響但任何檢查沒有得到執行。
可以添加新數據追加模式或合並模式(如果更新是必要的)。
如果是例行工作,你必須一遍又一遍地覆蓋數據(或刪除和重新創建),我沒有看到很多附加價值在使用三角洲湖。也許自動分區大小,讀優化。但不知道向下的數據流,這是難以評估。