首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读入json文件时corrupt_record

读入json文件时corrupt_record
EN

Stack Overflow用户
提问于 2021-02-04 20:23:24
回答 2查看 1.1K关注 0票数 1

我有一个不能被火花读懂的json (spark.read.json("xxx").show())

{'event_date_utc': None,'deleted': False, 'cost':1 , 'name':'Mike'}

问题似乎是“无”和“假”不在单引号下,seems不能将它们默认为布尔、null或偶数字符串。

我尝试给我的spark读取一个模式,而不是通过强制这2列为字符串并具有相同的错误来推断。

对我来说,spark试图先读取数据,然后应用模式,然后在读取部分失败。

有没有一种不修改输入数据就能告诉spark读取这些值的方法?我在用蟒蛇。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-04 21:14:38

输入不是有效的JSON,因此不能使用spark.read.json读取它。相反,您可以使用DataFrame将其作为文本spark.read.text加载,并使用UDF将字符串化的dict解析为json:

代码语言:javascript
复制
import ast
import json
from pyspark.sql import functions as F
from pyspark.sql.types import *

schema = StructType([
    StructField("event_date_utc", StringType(), True),
    StructField("deleted", BooleanType(), True),
    StructField("cost", IntegerType(), True),
    StructField("name", StringType(), True)
])

dict_to_json = F.udf(lambda x: json.dumps(ast.literal_eval(x)))

df = spark.read.text("xxx") \
    .withColumn("value", F.from_json(dict_to_json("value"), schema)) \
    .select("value.*")

df.show()

#+--------------+-------+----+----+
#|event_date_utc|deleted|cost|name|
#+--------------+-------+----+----+
#|null          |false  |1   |Mike|
#+--------------+-------+----+----+
票数 2
EN

Stack Overflow用户

发布于 2021-02-04 20:31:24

JSON看起来不太好。字段值需要引用。

您可以首先eval行,这些行看起来是Python格式的。

代码语言:javascript
复制
df = spark.createDataFrame(
    sc.textFile('true.json').map(eval),
    'event_date_utc boolean, deleted boolean, cost int, name string'
)

df.show()
+--------------+-------+----+----+
|event_date_utc|deleted|cost|name|
+--------------+-------+----+----+
|          null|  false|   1|Mike|
+--------------+-------+----+----+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66053285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档