【发布时间】:2023-02-06 21:12:09
【问题描述】:
我有以下 PySpark 数据框:
| ID | Value |
|---|---|
| 1 | value-1 |
| 1 | value-2 |
| 1 | value-3 |
| 2 | value-1 |
| 2 | value-2 |
我想把它转换成字典:
dict1 = {'1':['value-1','value-2','value-3'], '2':['value-1','value-2']}
我能够做到(在下面写了一个答案)但我需要更简单有效的方法。
【问题讨论】:
我有以下 PySpark 数据框:
| ID | Value |
|---|---|
| 1 | value-1 |
| 1 | value-2 |
| 1 | value-3 |
| 2 | value-1 |
| 2 | value-2 |
我想把它转换成字典:
dict1 = {'1':['value-1','value-2','value-3'], '2':['value-1','value-2']}
我能够做到(在下面写了一个答案)但我需要更简单有效的方法。
【问题讨论】:
我首先将 PySpark 数据框转换为 pandas 数据框,然后遍历所有单元格。这是 O(M*N) 的迭代,但代价高昂的部分是将 PySpark 数据帧转换为 pandas。
import pandas as pd
# Convert to Pandas data frame
df_pandas = df_spark.toPandas()
# Convert pandas data frame to dictionary
dict1= dict()
for i in range(0,len(df_pandas)):
key = df_pandas.iloc[i, 0]
if key not in dict1:
dict1.update({key:[]})
dict1[key].append(df_pandas.iloc[i, 1])
else:
dict1[key].append(df_pandas.iloc[i, 1])
【讨论】:
这是一种使用df.groupby() 和.to_dict() 的简单有效的方法,它们将产生相同的所需输出。
# Convert to Pandas data frame
df_pandas = df_spark.toPandas()
dict1 = df_pandas.groupby("ID")["Value"].apply(list).to_dict()
print(dict1)
{1: ['value-1', 'value-2', 'value-3'], 2: ['value-1', 'value-2']}
【讨论】: