[英]Stream Python JSON data into PySpark Dataframe with column header
[英]python write pyspark dataframe to json without header
對於之前提出的類似問題,我深表歉意。 這個問題在 Python 中。 但我找不到正確的解決方案我有以下 dataframe df1
SomeJson
=================
[{
"Number": "1234",
"Color": "blue",
"size": "Medium"
}, {
"Number": "2222",
"Color": "red",
"size": "Small"
}
]
我試圖把這個 dataframe 的內容寫成 json。
df0.coalesce(300).write.mode('append').json(<json_Path>)
它引入了第一個鍵,例如:
{
"SomeJson": [{
"Number": "1234",
"Color": "blue",
"size": "Medium"
}, {
"Number": "2222",
"Color": "red",
"size": "Small"
}
]
}
但是,我不想在 output 文件中有 { "SomeJson": } 這個。 我試着寫在下面。 但是,我在編寫自定義 Python function 以消除第一個 header 時迷失了方向。 非常感謝任何幫助
df0.rdd.map(<custom_function>).saveAsTextFile(<json_Path>)
基於此答案: 將 pyspark dataframe 轉換為 python 詞典列表
你可以這樣做:
df0.rdd.map(lambda x: [ele.asDict() for ele in x["SomeJson"]]).saveAsTextFile("data/output.json")
它像這樣產生 output :
[{'Color': 'blue', 'Number': '1234', 'size': 'Medium'}, {'Color': 'red', 'Number': '2222', 'size': 'Small'}]
編輯:
讀取 json 時,Spark 不會保持順序。 但是我們可以改變我們收到的字典的順序。 由於python3中的字典維護插入順序,我們只需要考慮順序創建一個新字典。 Rest 的東西只是字符串操作。 這就是我將如何做到的。
required_order = ["Number","Color","size"]
def change_order(row_dict, order):
temp_dict = {}
for name in order:
temp_dict[name] = row_dict[name]
return temp_dict
df0.rdd.map(lambda x: "{" + ",".join([str(ele) for ele in [change_order(ele.asDict(), required_order) for ele in x["SomeJson"]]]) + "}").saveAsTextFile("data/output.json")
它產生以下 output。
{{'Number': '1234', 'Color': 'blue', 'size': 'Medium'},{'Number': '2222', 'Color': 'red', 'size': 'Small'}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.