簡體   English   中英

Pyspark 在加載 jsons 列表時避免 _corrupt_record 列

[英]Pyspark avoid _corrupt_record column while loading a list of jsons

我有一個 dataframe 從 jsons 的 python 列表加載數據。

df = spark.read\
            .option("inferSchema","true")\
            .option("multiline",True)\
            .json(sc.parallelize(array_json))

json 結構可以如下所示:

{
  "name" : "Alex"
  "value" : 2,
  "tag" : {
    "property1" : "value1"
  }
}

但它也可以看起來像這樣:

{
  "name" : "Robert"
  "value" : 2,
  "tag" : None
}

如您所見,屬性標簽可以是 json 或 null 值。

我遇到的問題是,我得到一個名為_corrupt_record的列,僅用於標記值為 None 的 json 值。

_corrupt_record 姓名 價值 標簽
null 亞歷克斯 2 {"property1":"value1"}
{“名稱”:“羅伯特”,“值”:2,“標簽”:無 null null null

我希望 dataframe 如下所示:

姓名 價值 標簽
亞歷克斯 2 {"property1":"value1"}
羅伯特 2 沒有任何

關於如何解決這個問題的任何想法?

我重現了這一點,並遇到了與您提供的 JSON 數據相同的問題。

在此處輸入圖像描述

在此處輸入圖像描述

在這里,在上面的 JSON 中,None 值不在任何引號內,它可能導致損壞記錄,因為它不是任何類型的 int、string 等。

要像上面一樣獲得所需的 dataframe,請嘗試按照@Alex Ott的建議明確提供 JSON 的架構

from pyspark.sql.types import *
schema = StructType([
    StructField("name", StringType(), True),
    StructField("tag", StringType(), True),
    StructField("value", IntegerType(), True)
])

df=spark.createDataFrame(data=myjson,schema=schema)
df.show()

如果我們明確地給出模式,spark 會識別之前的類型並將 null 值分配為 None。

OUTPUT:

在此處輸入圖像描述

如果你的 JSON 是一個文件,你可以試試blackbishop的這個SO 線程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM