![](/img/trans.png)
[英]_corrupt_record error when reading a JSON file into Spark
[英]pyspark corrupt_record while reading json file
我有一個無法被 spark 讀取的 json( spark.read.json("xxx").show()
)
{'event_date_utc': None,'deleted': False, 'cost':1, 'name':'Mike'}
問題似乎是 None 和 False 不在單引號下,並且 spark 不能將它們默認為 boolean、null 甚至字符串。
我試圖讓我的 spark 讀取一個模式,而不是通過強制這 2 列為字符串並具有相同的錯誤來推斷。
對我來說,spark 是嘗試先讀取數據,然后應用模式,然后在讀取部分失敗。
有沒有辦法告訴 spark 在不修改輸入數據的情況下讀取這些值? 我正在使用 python。
您輸入的不是有效的 JSON 因此您無法使用spark.read.json
讀取它。 相反,您可以使用spark.read.text
將其作為文本 DataFrame 加載,並使用 UDF 將字符串化的 dict 解析為 json:
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|
#+--------------+-------+----+----+
JSON 看起來不太好。 需要引用字段值。
您可以先eval
這些行,它們看起來像是 Python dict 格式。
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|
+--------------+-------+----+----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.