我有这个JSON文件
{
"a": 1,
"b": 2
}
它是通过Python json.ump方法获得的。现在,我想使用pyspark将此文件读取到Spark中的DataFrame中。根据文档,我正在执行以下操作
Sc=SparkContext()
Sqlc=SQLContext(Sc)
Df=sqlc.read.json(‘my_file.json’)
打印df.show()
不过,PRINT语句给出了以下内容:
+---------------+
|_corrupt_record|
+---------------+
| {|
| "a": 1, |
| "b": 2|
| }|
+---------------+
有人知道发生了什么吗?为什么它不能正确解释文件?
6条答案
按热度按时间cbjzeqam1#
如果希望JSON文件保持原样(不删除新行字符
\n
),请包含multiLine=True
关键字参数uttx8gqw2#
您的输入文件中每行需要有一个JSON对象,请参见http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader.json
如果您的json文件如下所示,它将为您提供预期的 Dataframe :
wmomyfyw3#
在Spark 2.2+中,你可以使用以下命令读取多行的json文件。
如果每行有JSON对象,
ahy6op9u4#
补充@Bernhard的伟大答案
oo7oh9g95#
我想分享我的经验,其中我使用了JSON列字符串,但使用了Python表示法,这意味着我使用
None
而不是null
、False
而不是false
和True
而不是true
。在解析该列时,Spark向我返回一个名为
_corrupt_record
的列。因此,在解析JSON字符串之前,我必须做的是用标准的JSON表示法替换Python表示法:在此转换之后,例如,我可以在
json_notation
列上使用函数F.from_json()
,在这里,Pyspark能够正确地解析JSON对象。8wtpewkr6#
发生这种情况的另一个原因可能是文件编码。比方说,如果您正在阅读的文件是拉丁文编码的,您将会遇到这个问题。在读取文件时尝试使用.Option(“编码”,“cp1252”)。这为我解决了问题