我正在尝试使用 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)
.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]}]}]|
+------+------+------+--------------------+