web-dev-qa-db-ja.com

JSONファイルをSparkに読み込むときの_corrupt_recordエラー

私はこのJSONファイルを持っています

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

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|
|              }|
+---------------+

誰が何が起こっているのか、なぜファイルを正しく解釈していないのかを知っていますか?

27
mar tin

入力ファイルの行ごとに1つの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|
+---+---+
41
Bernhard

JSONファイルをそのままにしておきたい場合(改行文字\nを削除せずに)、multiLine=Trueキーワード引数を含めます

sc = SparkContext() 
sqlc = SQLContext(sc)

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

print df.show()
25
wiggy

Spark 2.2+では、次のコマンドを使用して複数行のJSONファイルを読み取ることができます。

val dataframe = spark.read.option("multiline",true).json( " filePath ")

行ごとにjsonオブジェクトがある場合、

val dataframe = spark.read.json(filepath)
6
Murtaza Zaveri

@Bernhardの素晴らしい答えに追加する

# original file was written with pretty-print inside a list
with open("pretty-printed.json") as jsonfile:
    js = json.load(jsonfile)      

# write a new file with one object per line
with open("flattened.json", 'a') as outfile:
    for d in js:
        json.dump(d, outfile)
        outfile.write('\n')
3
George Fisher