簡體   English   中英

在不使用 pandas 的情況下將 dataframe 轉換為 pyspark 中的字典

[英]Converting dataframe to dictionary in pyspark without using pandas

跟進這個問題和數據框,我正在嘗試將 dataframe 轉換為字典。 在 pandas 我用這個:

dictionary = df_2.unstack().to_dict(orient='index')

但是,我需要將此代碼轉換為 pyspark。 誰能幫我這個? 正如我從以前的問題中了解到的那樣,我確實需要使用 pandas,但是 dataframe 對我來說太大了,無法做到這一點。 我該如何解決這個問題?

編輯:

我現在嘗試了以下方法:

dictionary_list = map(lambda row: row.asDict(), df_2.collect())
dictionary  = {age['age']: age for age in dictionary_list}

參考)但它沒有產生它應該產生的結果。

在 pandas 中,我得到的是以下內容:

在此處輸入圖像描述

df2是上一篇文章中的 dataframe。 您可以先執行 pivot,然后按照鏈接帖子中的說明轉換為字典。

import pyspark.sql.functions as F

df3 = df2.groupBy('age').pivot('siblings').agg(F.first('count'))
list_persons = [row.asDict() for row in df3.collect()]
dict_persons = {person['age']: person for person in list_persons}

{15: {'age': 15, '0': 1.0, '1': None, '3': None}, 10: {'age': 10, '0': None, '1': None, '3': 1.0}, 14: {'age': 14, '0': None, '1': 1.0, '3': None}}

或者另一種方式:

df4 = df3.fillna(float('nan')).groupBy().pivot('age').agg(F.first(F.struct(*df3.columns[1:])))
result_dict = eval(df4.select(F.to_json(F.struct(*df4.columns))).head()[0])

{'10': {'0': 'NaN', '1': 'NaN', '3': 1.0}, '14': {'0': 'NaN', '1': 1.0, '3': 'NaN'}, '15': {'0': 1.0, '1': 'NaN', '3': 'NaN'}}

暫無
暫無

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

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