2016-02-15 75 views
14

當我有已經使用Python那樣json.dump方法獲得此JSON文件_corrupt_record錯誤讀取JSON文件到星火

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

。 現在,我想使用pyspark將此文件讀入Spark中的DataFrame。下面的文件,我在做這個

SC = SparkContext()

SQLC = SQLContext(SC)

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

打印df.show()

print語句吐出這雖然:

+---------------+ 
|_corrupt_record| 
+---------------+ 
|    {| 
|  "a": 1, | 
|   "b": 2| 
|    }| 
+---------------+ 

任何人都知道發生了什麼,爲什麼它不能正確解釋文件?

回答

26

你需要有每行一個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| 
+---+---+ 
+0

如何解決它,如果我的JSON文件是巨大的(一對夫婦的10萬行),它有很多的紀錄(列或特徵)之間的新線路?謝謝。 –

2

添加到@伯恩哈德的偉大的答案

# 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') 
+0

猜猜這可以是對答案的評論? –

3

如果你想離開你的JSON文件,因爲它是(不剝新行字符\n),包括multiLine=True關鍵字參數

sc = SparkContext() 
sqlc = SQLContext(sc) 

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

print df.show()