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

三角洲生活表模式的錯誤

Dave_Nithio
貢獻者

我用δ生活表加載一組csv文件目錄。我是根據每個模式推理的模式,以避免問題。這與常規三角洲表自動裝卸機,但沒有三角洲生活表。下麵是我使用的一個示例代碼定義的模式和負載DLT:

#定義模式模式= StructType ([StructField (“ID”, StringType(),真的,{“評論”:“獨特的客戶ID”}), StructField(“測試”,StringType(),真的,{“評論”:“這是一個測試”}),…)]# Define三角洲表@dlt生活。表(name = " test_bronze "評論=”從S3原始測試數據逐步吸收著陸區”,table_properties ={“質量”:“青銅”},模式=)#讀流def rafode_bronze():返回(火花。readStream .format .option (“cloudFiles (“cloudFiles”)。形式at", source_format) # format is csv .option("inferSchema", "False") .option("header", "True") .schema(schema) .load(data_source) # data_source is S3 directory )

當嚐試運行這個三角洲住表管道,我得到一個錯誤:

org.apache.spark.sql。AnalysisException:未能合並字段“測試”和“試驗。未能IntegerType和倍增式合並不兼容的數據類型

我嚐試運行readStream有或沒有”。選項(“inferSchema”,“假”)“是否允許使用預定義的模式和一個線性模式,但我遇到同樣的錯誤。似乎火花。readStream使用預定義的模式並不是每個讀csv文件的目錄,導致模式差異和加載失敗。我需要改變我的readStream代碼強製的使用模式或我丟失的東西嗎?

1接受解決方案

接受的解決方案

Kaniz
社區經理
社區經理

嗨@Dave威爾遜,每一列的差值表執行模式驗證,和源dataframe列的數據類型必須匹配目標表的列數據類型。如果它們不匹配,會拋出一個異常。

供參考,

https://docs.m.eheci.com/delta/delta-batch.html schema-validation-1

為了避免這種情況,你可以把列明確寫到目標表之前。

在原帖子查看解決方案

2回答2

Kaniz
社區經理
社區經理

嗨@Dave威爾遜,每一列的差值表執行模式驗證,和源dataframe列的數據類型必須匹配目標表的列數據類型。如果它們不匹配,會拋出一個異常。

供參考,

https://docs.m.eheci.com/delta/delta-batch.html schema-validation-1

為了避免這種情況,你可以把列明確寫到目標表之前。

shagun
新的貢獻者三世

我麵臨著類似的問題在加載json文件通過自動裝卸機三角洲生活表。

與這個選項能夠修複

.option (“cloudFiles。在ferColumnTypes", "True")

從文檔”格式不編碼數據類型(JSON和CSV),自動裝載機推斷所有列作為字符串(包括嵌套的JSON文件中的字段)。”

https://docs.m.eheci.com/ingestion/auto-loader/schema.html

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

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

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

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

Baidu
map