取消
顯示的結果
而不是尋找
你的意思是:

ProtocolChangedException並發盲目附加三角洲表

MiguelKulisic
新的貢獻者二世

你好,

我開發一個應用程序,運行多個進程,結果常見三角洲表寫成盲目的附加。根據我在線閱讀的文檔:https://docs.www.eheci.com/delta/concurrency-control.html protocolchangedexception&https://docs.delta.io/0.4.0/delta-concurrency.html,附加隻寫不應該引起並發問題。我遇到以下錯誤:

ProtocolChangedException:三角洲的協議版本表已經改變了一個並發更新。這發生在多個作家寫一個空目錄。創建表提前將避免這種衝突。請再次嚐試操作。衝突的提交:{“時間戳”:1642800186194,“標識”:“61587887627726”,“用戶名”:“用戶名”,“操作”:“寫”,“operationParameters”:{“模式”:附加,“partitionBy”:[“日期”、“GroupId”,“範圍”)},“筆記本”:{“notebookId”:“241249750697631”},“clusterId”:“”,“isolationLevel”:“WriteSerializable”、“isBlindAppend”:真的,“operationMetrics”: {“numFiles”:“56”、“numOutputBytes”:“267086”,“numOutputRows”: " 61 "}}引用https://docs.microsoft.com/azure/databricks/delta/concurrency-control為更多的細節。

背景:更多信息

  1. 寫數據的代碼是:
def saveToDeltaTable (ds:數據集(類),dtPath:字符串)= {ds.write.format .partitionBy(“δ”)(“日期”、“GroupId”,“範圍”).option .mode (“mergeSchema”、“true”)(“追加”).save (dtPath)}
  1. 我無法重現這個非常一致。
  2. 兩個寫目前運行在相同的集群。他們最終不會。
  3. 分區列“日期”和“GroupId”為每一個寫有相同的值,但分區列“範圍”每個寫之間會有所不同。

鑒於“ProtocolChangedException”中給出的描述文檔,它沒有多大意義對我來說這是崩潰。我唯一的想法是,這可能是由於mergeSchema國旗即使它是目前什麼都不做。

謝謝你!

米蓋爾

1接受解決方案

接受的解決方案

werners1
尊敬的貢獻者三世

我認為你是對的,mergeSchema將改變表的模式,但如果你都寫相同的表與另一個模式,會是哪一個?

你能檢查是否你寫同樣的模式,或刪除mergeschema嗎?

在原帖子查看解決方案

2回答2

匿名
不適用

嗨,@Miguel Kulisic !很高興認識你,謝謝你來社區尋求幫助。我們會給其餘的社區有機會回應之前回來。提前感謝您的耐心!:slightly_smiling_face:

werners1
尊敬的貢獻者三世

我認為你是對的,mergeSchema將改變表的模式,但如果你都寫相同的表與另一個模式,會是哪一個?

你能檢查是否你寫同樣的模式,或刪除mergeschema嗎?

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map