在Pyspark中读取Json

1szpjjfi  于 2022-12-22  发布在  Spark
关注(0)|答案(2)|浏览(181)

我想在PySpark中读取一个JSON文件,但是JSON文件是这样的格式(没有逗号和方括号):

{"id": 1, "name": "jhon"}
{"id": 2, "name": "bryan"}
{"id": 3, "name": "jane"}

在PySpark中有没有简单的方法来读取这个JSON?
我已经试过这个代码:

df= spark.read.option("multiline", "true").json("data.json")
df.write.parquet("data.parquet")

但它不起作用:在 parquet 文件中,只显示第一行。
我只想读取这个JSON文件并保存为 parquet ...

8cdiaqws

8cdiaqws1#

在从你提到的文件中阅读数据时,只出现第一行,因为multiline参数被设置为True,但是在本例中,有一行是JSON对象。因此,如果你将multiline参数设置为False,它将按预期工作。

df= spark.read.option("multiline", "false").json("data.json")
df.show()

如果您的JSON文件在文件中包含JSON数组,如

[
{"id": 1, "name": "jhon"},
{"id": 2, "name": "bryan"},
{"id": 3, "name": "jane"}
]

[
    {
        "id": 1, 
        "name": "jhon"
    },
    {
        "id": 2, 
        "name": "bryan"
    }
]

multiline参数设置为True即可。

gab6jxml

gab6jxml2#

首先尝试以文本文件的形式读取,然后将其解析为json对象

from pyspark.sql.functions import from_json, col
import json

lines = spark.read.text("data.json")
parsed_lines = lines.rdd.map(lambda row: json.loads(row[0]))

# Convert JSON objects --> a DataFrame
df = parsed_lines.toDF()
df.write.parquet("data.parquet")

相关问题