亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

混合列中的空字符串在使用 Spark 加載時使行無效

混合列中的空字符串在使用 Spark 加載時使行無效

開心每一天1111 2022-09-06 16:36:58
請考慮以下 JSON:{"col1": "yoyo", "col2": 1.5}{"col1": "",     "col2": 6}{"col1": "456",  "col2": ""}{"col1": 444,    "col2": 12}{"col1": null,   "col2": 1.7}{"col1": 3.14,   "col2": null}我使用(Py)Spark加載,如下所示:from pyspark.sql import SparkSessionspark = SparkSession.builder.master("local[*]").getOrCreate()df = spark.read.json("my.json")df.show()這將產生:+----+----+|col1|col2|+----+----+|yoyo| 1.5||    | 6.0||null|null|  <---===***| 444|12.0||null| 1.7||3.14|null|+----+----+我很難理解為什么第三行被無效。似乎原因是第二列中唯一的字符串是空字符串,這以某種方式導致空化。請注意,第 2 行也包含一個空字符串,但該行未被清空。""col1對我來說,這是一個非常令人困惑和意想不到的行為。我無法在文檔中找到提示。這種行為是預期的嗎?為什么會這樣發生?我希望第 3 行包含 的字符串和 的空字符串。我怎樣才能實現這種行為(這對我來說感覺更自然)?"456"col1""col2
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

使用 Spark 時,無法在單個列中混合使用不同的數據類型。


讀取 json 文件時,Spark 將嘗試推斷每列的數據類型(有關更多詳細信息,請參閱底部的注釋)。在這里,Spark認為是字符串類型并且是雙精度的。這可以通過讀取 json 文件并在數據幀上使用來確認。

這意味著數據是根據這些推斷的數據類型進行解析的。因此,Spark將嘗試解析為雙精度,但顯然會失敗。(對于它中的第二行,它的工作原理是,因為被推斷為字符串類型,因此是有效的輸入。col1col2printSchema""col1col1""


使用時,可以設置不同的模式。從文檔中,我們有:spark.read.json


mode -

允許在解析期間處理損壞記錄的模式。如果設置了“無”,則使用缺省值 。PERMISSIVE


PERMISSIVE:當它遇到損壞的記錄時,將格式錯誤的字符串放入由 columnNameOfCorruptRecord 配置的字段中,并將其他字段設置為 null。若要保留損壞的記錄,用戶可以在用戶定義的架構中設置名為 columnNameOfCorruptRecorcord 的字符串類型字段。如果架構沒有該字段,則會在分析過程中刪除損壞的記錄。推斷架構時,它會在輸出架構中隱式添加一個 columnNameOfCorruptRecord 字段。

DROPMALFORMED:忽略整個損壞的記錄。

FAILFAST:在遇到損壞的記錄時引發異常。

從上面,我們可以看到默認情況下使用模式,如果遇到損壞的記錄,則所有字段都設置為 。在這種情況下,就會發生這種情況。要進行確認,可以設置為 ,PERMISSIVEnullmodeFAILFAST


spark.read.json("my.json", mode='FAILFAST')

這將給出一個例外。


這可以通過不推斷數據類型并將所有內容讀取為字符串來解決。


spark.read.json("my.json", primitivesAsString='true')

注意:與其他源(如 csv 和 txt)相比,json 的架構推斷略有不同,請參閱此處。對于 json 文件,兩者都有特殊的處理來處理不區分兩者的 json 生成器。對于 csv 文件,具有空字符串的列仍會使整個列被推斷為字符串,但對于 json 而言,情況并非如此。""null""


作為旁注,替換為例如 in 將使推斷的列類型為字符串。"""5"col2


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號