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

失敗的合並不兼容的數據類型

兔子
新的貢獻者三世

我們處理每天josn文件的存儲位置,它將存檔一旦記錄添加到相應的表中。

source_location_path:“..../ mon = 5 /天= 1 / fld1”、“..../ mon = 5 /天= 1 / ..... fld2”“.... / mon = 5 /天= 1 / fldN”

閱讀:

df = spark.read。json(多行= True, source_location_path pathGlobFilter = f“* _ {file_name}”)

寫:

df.write.partitionBy(“月”).option .mode (“mergeSchema”、“true”)(“追加”).saveAsTable (table_name)

第一天文件內容:

{" id ":“1”,“名字”:“測試”,“檢查”:[{“id”:“1”,“價值”:“con1”、“評論”:“測試”},{" id ":“2”,“價值”:“con2”、“評論”:“測試”}],“細節”:[],“namedetail”: {“1 abc2efg”:“測試”的名字}}

第二天文件內容:

{" id ":“2”,“名字”:“test2”,“檢查”:[],“細節”:[],“namedetail”:{}}或{" id ":“2”,“名字”:“test2”,“檢查”:[],“細節”:[],“namedetail”: {“94 jut2jfn”:“測試人員”}}

問題1:當我們試圖附加到現有表我們得到的價值”“失敗的合並不兼容的數據類型。因為俊文件對應的複雜與原始列的值。

第二天文件以來空值的數據類型有改變。

為例:

第一天:列“檢查”是“結構體數組”——它有嵌套結構

第二天:“檢查”列數組”——因為列沒有任何記錄

問題2:天1 -“namedetail”列是Struct類型和值(“10 abc2efg”:“測試名稱”)

第二天:同一列“namedetail”還有另一個值(“94 jut2jfn”:“測試人員”)

所以它考慮到第二天“namedetail”作為一個新列列值。所以我們不能夠合並。

同樣,如果“namedetail”空記錄然後我們正麵臨著一個問題。

你能幫我處理數據類型不匹配和動態列變化?

謝謝,

香港

1回複1

Shalabh007
尊敬的貢獻者

@Hare Krishnan突出顯示的問題可以很容易地使用.option處理(“mergeSchema”、“true”)的時候閱讀的所有文件。

示例代碼:

spark.read。選項(“mergeSchema”,“真正的”)。json(<文件路徑>、多行= True)

唯一的場景將無法處理如果在嵌套列類型並不相同。

示例文件1:

{" name ":“測試”,“檢查”:[{" id ": " 1 "},]}

示例文件2:

{“名稱”:“測試”,“檢查”:[{" id ": 1、},]}

超過2文件mergeSchema選項將失敗,因為“id”列在檢查有兩個不同類型的值:字符串(在文件1)和int(在文件2)。

處理這種情況下你需要編寫一些定製函數。

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

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

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

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

Baidu
map