SPARK read.json抛出java.io.IOException:换行前字节太多

SPARK read.json抛出java.io.IOException:换行前字节太多,json,apache-spark,pyspark,spark-dataframe,bigdata,Json,Apache Spark,Pyspark,Spark Dataframe,Bigdata,读取大型6gb单行json文件时出现以下错误: Job aborted due to stage failure: Task 5 in stage 0.0 failed 1 times, most recent failure: Lost task 5.0 in stage 0.0 (TID 5, localhost): java.io.IOException: Too many bytes before newline: 2147483648 spark不使用新行读取json文件,因此整个6

读取大型6gb单行json文件时出现以下错误:

Job aborted due to stage failure: Task 5 in stage 0.0 failed 1 times, most recent failure: Lost task 5.0 in stage 0.0 (TID 5, localhost): java.io.IOException: Too many bytes before newline: 2147483648
spark不使用新行读取json文件,因此整个6 gb json文件位于一行:

jf = sqlContext.read.json("jlrn2.json")
配置:

spark.driver.memory 20g

是的,您的行中有多个
Integer.MAX\u VALUE
字节。你需要把它分开

请记住,Spark希望每一行都是有效的JSON文档,而不是整个文件。下面是来自Spark的相关行

请注意,作为json文件提供的文件不是典型的json文件。每行必须包含一个单独的、自包含的有效JSON对象。因此,常规的多行JSON文件通常会失败

因此,如果JSON文档的格式为

[
  { [record] },
  { [record] }
]
你会想把它改成

{ [record] }
{ [record] }

我在PySpark中读取一个巨大的JSON文件时偶然发现了这个错误,并得到了相同的错误。因此,如果其他人也想知道如何以PySpark可以正确读取的格式保存JSON文件,下面是一个使用pandas的快速示例:

import pandas as pd
from collections import dict

# create some dict you want to dump
list_of_things_to_dump = [1, 2, 3, 4, 5]
dump_dict = defaultdict(list)
for number in list_of_things_to_dump:
    dump_dict["my_number"].append(number)

# save data like this using pandas, will work of the bat with PySpark
output_df = pd.DataFrame.from_dict(dump_dict)
with open('my_fancy_json.json', 'w') as f:
    f.write(output_df.to_json(orient='records', lines=True))
之后,在PySpark中加载JSON非常简单:

df = spark.read.json("hdfs:///user/best_user/my_fancy_json.json", schema=schema)

它是否包含多个文档?@zero323是的它是否具有规则结构?如果是,您可以使用自定义输入格式或分隔符。是否有任何工具可以将大型文件转换为这种格式?