簡體   English   中英

pyspark 損壞記錄同時讀取 json 文件

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

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