私はこの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|
| }|
+---------------+
誰が何が起こっているのか、なぜファイルを正しく解釈していないのかを知っていますか?
入力ファイルの行ごとに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|
+---+---+
JSONファイルをそのままにしておきたい場合(改行文字\n
を削除せずに)、multiLine=True
キーワード引数を含めます
sc = SparkContext()
sqlc = SQLContext(sc)
df = sqlc.read.json('my_file.json', multiLine=True)
print df.show()
Spark 2.2+では、次のコマンドを使用して複数行のJSONファイルを読み取ることができます。
val dataframe = spark.read.option("multiline",true).json( " filePath ")
行ごとにjsonオブジェクトがある場合、
val dataframe = spark.read.json(filepath)
@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')