我收到:
寫入 Delta 表時檢測到架構不匹配
我試圖遵循以下建議:
要覆寫您的架構或更改磁區,請設定:'.option("overwriteSchema", "true")'。
基于此解決方案:寫入增量表時檢測到架構不匹配 - Azure Databricks
- 我添加了這樣一個選項,但它看起來不起作用,或者我只是做錯了。
- 我搞定了
dbfs:/delta-tables/_delta_log/ - 我什至嘗試洗掉保存資料的整個檔案夾 (
dbfs:/FileStore/shared_upload/[user]/data_Delta)。
這些都沒有解決這個問題。我做錯了什么?如果我想將舊筆記本與新集群(我終止的舊筆記本)重用,為什么它會以這種方式運行,所以我猜它應該是“干凈的”?
我按照以下方式進行:
1.我從GEN2加載資料。它們以這種方式采用鑲木地板格式:
spark.read.option("overwriteSchema", "true")\
.parquet(f"wasbs://{CONTAINER_NAME}@{STORAGE_ACCOUNT_NAME}.blob.core.windows.net/data")
如您所見,我設定overwriteSchema為true.
2.然后我以delta格式保存它:
sd_weather.write.format('delta').mode("overwrite") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
3.然后我嘗試創建Delta Table
sd_weather.write.format('delta') \
.mode("overwrite").saveAsTable("data_Delta")
在這里我收到錯誤:
AnalysisException:寫入 Delta 表時檢測到架構不匹配
uj5u.com熱心網友回復:
您需要.option("overwriteSchema", "true")在寫操作中使用,而不是在讀操作中使用:
sd_weather.write.format('delta').mode("overwrite") \
.option("overwriteSchema", "true") \
.save("dbfs:/FileStore/shared_upload/[user]/data_Delta")
您還將資料寫入兩次,一次作為“普通”目錄,第二次作為托管表。如果您想在自定義位置創建非托管表,只需將path選項添加到第三個變體(也是dbfs:/默認架構,因此您可以省略它):
sd_weather.write.format('delta') \
.option("overwriteSchema", "true") \
.option("path", "/FileStore/shared_upload/[user]/data_Delta") \
.mode("overwrite").saveAsTable("data_Delta")
此外,這取決于架構的不同之處,如果它只是添加列或類似的東西,那么您可以使用mergeSchema代替overwriteSchema.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347530.html
下一篇:Pyspark一般匯入問題
