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

驗證模式的json列

Braxx
因素二世

我有一個與col2 dataframe像下麵的鍵-值對。我想過濾col2隻有行有效的模式。

df可能有很多的對,有時更少,有時更多,這是罰款,隻要結構很好。col2也允許null。

錯誤的價值觀就像在例4和5的“名稱”或“價值”是缺失或缺乏括號[]

模式:

[{“名稱”:“aa”、“價值”:“abc”},{“名稱”:“bb”、“價值”:“12”},{“名稱”:“cc”、“價值”:“3”}]

數據樣本:

col1 col2 1[{“名稱”:“aaa”、“價值”:“5”},{" name ": " bbb ", " value ": " 500 "},{"名稱":“ccc”、“價值”:" 300 "}]2[{“名稱”:“aaa”、“價值”:“5”},{" name ": " bbb ", " value ": " 500 "}) 3 4{“名稱”:“aaa”、“價值”:“5”},{" name ": " bbb ", " value ": " 500 "} 5[{“名稱”:“aaa”}, {" name ": " bbb ", " value ": " 500 "})

12個回複12

werners1
尊敬的貢獻者三世

我想說的是json。火花列上加載無法工作(我不是很清楚)。

這不僅僅是一個值列表。因此,for循環將無法正常工作。

相反,你應該使用一個火花函數檢查json字符串的有效性,遠東to_json。

和我的意思通過df作為函數參數隻是def is_json (df,……)。

有時需要使用列名(所以不列本身隻有名稱)和坳本身(所以實際df-column值)。

如果是這樣你也要把DF。

Braxx
因素二世

最後解決。

損壞的行可以標記為1,那麼易過濾掉

#定義一個模式從pyspark.sql col2。類型進口StructType StructField json_schema = ArrayType (StructType ([StructField(“名字”,StringType(),可空= True), StructField(“價值”,StringType(),可空= True)))) # from_json用於驗證col2是否有有效的模式。如果是- > correct_json = col2,如果沒有- > correct_json = null #空from_json返回的默認值在創建有效的json不能損壞json被標記為1 #行通過檢查之前和之後的驗證結果。如果col2不是零和驗證後成為零這意味著json的df =數據\ .withColumn (“correct_json from_json(坳(“col2”), json_schema)) \ .withColumn (“json_flag”,當(坳(col2) .isNotNull () & (“correct_json”) .isNull上校(),1).otherwise (0)) \ .drop (“correct_json”)顯示(df)

匿名
不適用

@Bartosz Wachocki——謝謝你分享你的解決方案,並標記為最好。

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

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

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

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

Baidu
map