gpt4 book ai didi

python - Pyspark 在加载 json 列表时避免 _corrupt_record 列

转载 作者:行者123 更新时间:2023-12-03 05:19:38 26 4
gpt4 key购买 nike

我有一个从 python json 列表加载数据的数据框。

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
}

如您所见,属性 tag 可以是 json 或 null 值。

我遇到的问题是,我得到一个名为 _corrupt_record 的列,仅适用于标签值为 None 的 json 值。

<表类=“s-表”><标题>_corrupt_record姓名值标签 <正文>空亚历克斯2{“属性1”:“值1”}{“名称”:“罗伯特”,“值”:2,“标签”:无空空空

我希望数据框如下所示:

<表类=“s-表”><标题>姓名值标签 <正文>亚历克斯2{“属性1”:“值1”}罗伯特2无

关于如何解决这个问题有什么想法吗?

最佳答案

我重现了此内容,并遇到了与您提供的 JSON 数据相同的问题。

enter image description here

enter image description here

这里,在上面的 JSON 中,None 值不在任何引号内,它可能会导致 Corrupt_record,因为它不是任何类型的 int、string 等。

要获得如上所述的所需数据帧,请尝试按照@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 会识别之前的类型并为 None 分配空值。

输出:

enter image description here

如果你的JSON是一个文件,你可以尝试这样SO thread通过 blackbishop .

关于python - Pyspark 在加载 json 列表时避免 _corrupt_record 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73281456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com