我有一個與col2 dataframe像下麵的鍵-值對。我想過濾col2隻有行有效的模式。
可能有很多的對,有時更少,有時更多,這是罰款,隻要結構很好。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 "})
最後解決。
損壞的行可以標記為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)