[英]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.