2015-09-02 115 views
0

我正在構建一個Python腳本,我需要從json RDD生成一個json文件。 以下是保存json文件的代碼片段。爲pyspark生成單個json文件RDD

jsonRDD.map(lambda x :json.loads(x)) 
.coalesce(1, shuffle=True).saveAsTextFile('examples/src/main/resources/demo.json') 

但我需要將json數據寫入單個文件,而不是跨多個分區分佈數據。

所以,請建議我適當的解決方案,這

回答

0

我有問題,拯救pyspark過JSON文件,有一次我在一個RDD或數據幀有他們,所以我要做的就是將其轉換爲大熊貓數據幀,並將其保存到非分佈式目錄。

import pandas 

df1 = sqlContext.createDataFrame(yourRDD) 
df2 = df1.toPandas() 
df2.to_json(yourpath) 
+0

謝謝您回答但腳本生成了一個異常「ImportError:No module named pandas」。當通過Apache執行時spark –

+0

您需要在羣集中的所有節點上安裝熊貓,因爲它看起來像是從分佈式數據集到本地文件系統中一臺服務器上存儲的文件。假設你正在使用linux,你應該可以使用「sudo apt-get install python-pandas」從終端安裝它,但是你應該能夠谷歌你的特定服務器安裝,因爲安裝額外的python庫是一個非常標準的事情。 – Jared

0

不使用像大熊貓額外的庫,你可以通過它們減少jsons的一個大的字符串,每次一個新行分開保存幾個jsons的RDD:

# perform your operation 
# note that you do not need a lambda expression for json.loads 
jsonRDD = jsonRDD.map(json.loads).coalesce(1, shuffle=True) 

# map jsons back to string 
jsonRDD = jsonRDD.map(json.dumps) 

# reduce to one big string with one json on each line 
json_string = jsonRDD.reduce(lambda x, y: x + "\n" + y) 

# write your string to a file 
with open("path/to/your.json", "w") as f: 
    f.write(json_string.encode("utf-8"))