Pyspark 读取带有缩进字符 ( ) 的 json 文件

问题描述 投票:0回答:1

我正在尝试使用 pyspark 读取 json 文件。我通常能够打开 json 文件,但是不知何故,我的一个 json 文件在读取时将缩进显示为

\t
字符。首先,我做了以下尝试来读取文件:

spark = SparkSession.builder.appName("spark_learning").getOrCreate()
read1 = spark.read.format("json").option("multiplelines", "true").load(file_path)

这导致了 ['_corrupt_record'] 作为结果。在第二次尝试中,我尝试了以下代码

read2 = spark.read.format("text").load(file_path)
read2.show() 

输出是

+--------------------+
|               value|
+--------------------+
|                   {|
| \t"key1": "value1",|
| \t"key2": "value2",|
| \t"key3": "value3",|
|        \t"key4": [{|
|\t\t"sub_key1": 1...|
|  \t\t"sub_key2": [{|
|\t\t\t"nested_key...|
|                \t}]|
|                   }|
+--------------------+

当将此 json 文件与我能够读取的其他文件进行比较时,我注意到

\t
的差异。看起来文件正在将缩进读取为字符(
\t
)。我还尝试使用可用的答案将
\t
替换为空格(例如,如何让 Spark 将 JSON 转义字符串字段解析为 JSON 对象以推断 DataFrame 中的正确结构?)。然而,我没有成功。它仍然给我 Corrupt_Record 列。我很乐意从这个社区获得任何帮助。

(PS:我是大数据世界和 PySpark 的新手。)

这是示例数据:

{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": [{
    "sub_key1": 1111,
    "sub_key2": [{
        "nested_key1": [5555]}]
}]
}

https://drive.google.com/file/d/1_0-9d41LnFR8_OGP4k0HK7ghn1JkQhmR/view?usp=sharing

json apache-spark pyspark bigdata
1个回答
0
投票

.option()
应该是
multiline
而不是
multiplelines
。通过此更改,您应该能够将 json 按原样读取到数据帧中,否则您必须使用
wholeTextFiles()
读取并将其映射到 json。

df=spark.read.format("json").option("multiline","true").load(file_path)
df.show(truncate=False)

+------+------+------+--------------------+
|key1  |key2  |key3  |key4                |
+------+------+------+--------------------+
|value1|value2|value3|[{1111, [{[5555]}]}]|
+------+------+------+--------------------+
© www.soinside.com 2019 - 2024. All rights reserved.