将JSON文件读入Spark时出现_corrupt_record错误

mar*_*tin 29 python json dataframe pyspark

我有这个JSON文件

{
    "a": 1, 
    "b": 2
}
Run Code Online (Sandbox Code Playgroud)

这是用Python json.dump方法获得的.现在,我想使用pyspark将此文件读入Spark中的DataFrame.以下文档,我正在这样做

sc = SparkContext()

sqlc = SQLContext(sc)

df = sqlc.read.json('my_file.json')

print df.show()

print语句虽然吐出了这个:

+---------------+
|_corrupt_record|
+---------------+
|              {|
|       "a": 1, |
|         "b": 2|
|              }|
+---------------+
Run Code Online (Sandbox Code Playgroud)

任何人都知道发生了什么以及为什么它没有正确解释文件?

Ber*_*ard 47

您需要在输入文件中每行有一个json对象,请参阅http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader.json

如果您的json文件看起来像这样,它将为您提供预期的数据帧:

{ "a": 1, "b": 2 }
{ "a": 3, "b": 4 }

....
df.show()
+---+---+
|  a|  b|
+---+---+
|  1|  2|
|  3|  4|
+---+---+
Run Code Online (Sandbox Code Playgroud)

  • 如果我的JSON文件很大(几个100K行)并且在记录(列或功能)之间有很多新行,我该如何解决?谢谢. (5认同)
  • 也许使用“jq”来重新格式化(压缩)文件?@M.雷兹 (2认同)

小智 27

如果要保留JSON文件(不删除新行字符\n),请包含multiLine=True关键字参数

sc = SparkContext() 
sqlc = SQLContext(sc)

df = sqlc.read.json('my_file.json', multiLine=True)

print df.show()
Run Code Online (Sandbox Code Playgroud)


小智 6

在Spark 2.2+中,您可以使用以下命令读取多行的json文件。

val dataframe = spark.read.option("multiline",true).json( " filePath ")
Run Code Online (Sandbox Code Playgroud)

如果每行有json对象,

val dataframe = spark.read.json(filepath)
Run Code Online (Sandbox Code Playgroud)

  • 这是 Scala,而不是 python。 (3认同)