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

火花問題處理json數據模式數據類型不匹配時發生

FarBo
新的貢獻者二世

你好,

我遇到一個問題用火花,當創建一個從原始json dataframe來源。

我定義了一個模式數據,問題是,當有一個定義的一個列值及其之間的不匹配模式,火花不僅將該列設置為null,還所有列後列設置為null。我做了一個最小的例子顯示連接的問題。

基本上,“foo71”的價值觀和“foo72 row_2問題定義的模式“DecimalType (10、7)”。然後,在創建dataframe (df_1),所有列後列“foo7”返回null,盡管模式是正確的。其實我希望的是隻有“foo72”和“foo71”是null,和其他列之後,應該有正確的值列。

我用以下這個筆記本:

1 -磚磚的筆記本數據科學與工程工作區

2——我的集群使用磚運行時版本12.0(包括Apache火花3.3.1,Scala 2.12)

我有一個解決這個問題,但我認為它可能值得報道它修複,因為這可能會在類似的情況下丟失數據的風險。

謝謝你

法紮德

3回複3

匿名
不適用

@Farzad Bonabi:

謝謝你報告這個問題。這似乎是一個已知的缺陷在火花處理畸形的十進製值。當一個十進製值輸入不解析JSON數據中的火花,它不僅集這一列空還所有後續列為null。

這個問題的一個解決方案是使用spark.read.json()方法,而不是spark.createDataFrame(),然後選擇感興趣的列。這裏有一個例子:

從pyspark.sql。功能導入坳json_data = " {" row_1 ": {“foo1”:“1”,“foo2”:“2”,“foo3”:“3”,“foo4”:“4”,“foo5”:“5”,“foo6”:“6”,“foo7”:“7”,“foo71”:“1.2345678”,“foo72”:“123.456789”,“foo8”:“8”},“row_2”: {“foo1”:“10”、“foo2”:“20”、“foo3”:“30”,“foo4”:“40”、“foo5”:“50”、“foo6”:“60”,“foo7”:“70”,“foo71”:“invalid_value”、“foo72”:“invalid_value”、“foo8”: " 80 "}}“df = spark.read.json (sc.parallelize ([json_data]),模式= MySchema) df_1 = df.select(坳(“foo1”),坳(“foo2”),坳(“foo3”),坳(“foo4”),坳(“foo5”),坳(“foo6”),坳(“foo7”),坳(“foo71”),坳(“foo72”),坳(“foo8”)) df_1.show ()

這將產生預期的輸出,隻有“foo71”和“foo72”列是零和其餘的列有正確的值。

FarBo
新的貢獻者二世

嗨@Suteja卡努裏人

謝謝你的回複和建議。在另一種方式我們終於解決了這個問題,但是你的建議似乎也是一個好方法。

我主要想報告bug,但是現在看來,這是一個已知的問題。:slightly_smiling_face:

sbachstein
新的貢獻者二世

嗨@Suteja卡努裏人

你會提供一個鏈接到錯誤的問題跟蹤器?

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

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

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

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

Baidu
map