簡體   English   中英

python write pyspark dataframe to json without 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM