JSON讀者解析值為零

當你讀一個JSON文件,引發讀者JSON返回null值,而不是實際的數據。

寫的saritha.shivakumar

去年發表在:2022年5月16日

問題

你正試圖讀取JSON文件。

你知道文件數據,但是Apache火花JSON返回一個讀者價值。

示例代碼

您可以使用該示例代碼來重現該問題。

  1. 創建一個測試在DBFS JSON文件。
    % python dbutils.fs.rm (“dbfs: / tmp / json / parse_test.txt”) dbutils.fs.put (“dbfs: / tmp / json / parse_test。txt”、“”“{”data_flow ":{“上遊”:[{" $ ":{“源”:“輸入”},“cloud_type”: "},{" $ ":{“源”:“文件”},“cloud_type”:{“蔚藍”:“雲平台”,“aws”:“雲服務”}}]}}”“”)Beplay体育安卓版本
  2. 讀取JSON文件。
    % python jsontest = spark.read.option (“inferSchema”,“真正的”). json (“dbfs: / tmp / json / parse_test.txt”)顯示(jsontest)
  3. 結果是一個null值。
    jsontest結果顯示空值。

導致

  • 在火花2.4及以下,JSON解析器允許空字符串。隻有特定的數據類型,如IntegerType被視為空的時候。
  • 在火花3.0及以上,JSON解析器不允許空字符串。所有數據類型是拋出一個異常,除了BinaryTypeStringType

有關更多信息,審查火花SQL遷移指南

示例代碼

JSON的例子顯示了錯誤,因為有兩個相同的分類字段的數據。

第一個cloud_type入口是一個空字符串。第二個cloud_type輸入的數據。

“cloud_type”:“”“cloud_type”:{“蔚藍”:“雲平台”,“aws”Beplay体育安卓版本:“雲服務”}

由於JSON解析器不允許空字符串在火花3.0及以上,值作為輸出返回。

解決方案

設置火花配置(AWS|Azure|GCP)值spark.sql.legacy.json.allowEmptyString.enabled真正的。這配置引發3.0 JSON解析器允許空字符串。

你可以設置此配置集群級別或筆記本級別。

示例代碼

% python spark.conf.set (“spark.sql.legacy.json.allowEmptyString。啟用”,真的)jsontest1 = spark.read.option (“inferSchema”,“真正的”). json (“dbfs: / tmp / json / parse_test.txt”)顯示(jsontest1)

jsontest結果顯示實際值。


這篇文章有用嗎?