簡體   English   中英

如何將包含序列化json的spark數據幀列轉換為數據幀本身?

[英]How can I convert a spark dataframe column, containing serialized json, into a dataframe itself?

原因我覺得這不是這個問題的重復:

  • from_json需要事先了解json模式,我不知道
  • get_json_object - 我試圖使用它,但是運行get_json_object的結果本身就是一個字符串,讓我回到正方形。 此外,(從exprs語句中)出現 - 再次 - 作者希望事先了解模式,而不是推斷模式。

要求:

  • 事前,我不知道json架構是什么,因此需要推斷它。 spark.read.json似乎是推斷模式的最佳案例,但我遇到的所有示例都是從文件加載json。 在我的用例中,json包含在數據幀的一列中。

  • 我對源文件類型不可知(在這種情況下,使用parquet和csv進行測試)。 但是,源數據幀架構是並且結構良好。 對於我的用例,json包含在源數據框中名為“fields”的列中。

  • 結果數據框應鏈接到源數據幀中的主鍵(我的示例為“id”)。

關鍵結果是火花源代碼 傳遞給spark.read.json path可能是“存儲json對象的字符串的RDD”。

這是源數據幀架構

我想出的代碼是:

def inject_id(row):
    js = json.loads(row['fields'])
    js['id'] = row['id']
    return json.dumps(js)
json_df = spark.read.json(df.rdd.map(inject_id))

json_df然后有一個架構這樣

請注意 - 我沒有用更嵌套的結構測試它,但我相信它會支持spark.read.json支持的任何東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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