繁体   English   中英

如何在Pyspark的Dictionary中转换Dataframe Column1:Column2(key:value)?

[英]How can I convert Dataframe Column1:Column2 (key:value) in Dictionary in Pyspark?

我有一个具有不同Atr1值的数据框,并且具有其他一些属性,并且我想从中生成一个字典,并考虑字典的键,每个Atr1值(唯一值,正如我之前所说的),以及dict的值和Atr2的值。

这是数据框:

+------+------+------+------+
| Atr1 | Atr2 | Atr3 | Atr4 |
+------+------+------+------+
|  'C' |  'B' |  21  |  'H' |
+------+------+------+------+
|  'D' |  'C' |  21  |  'J' |
+------+------+------+------+
|  'E' |  'B' |  21  |  'K' |
+------+------+------+------+
|  'A' |  'D' |  24  |  'I' |
+------+------+------+------+

我想要一个这样的字典:

Dict -> {'C': 'B', 'D': 'C', 'E': 'B', 'A': 'D'}

我该怎么办?

您可以只使用一个简单的collectAsMap()

df.select("Atr1", "Atr2").rdd.collectAsMap()

您可以使用如下形式:

attr1 = df.select('attr1').rdd.flatMap(lambda x: x).collect()
attr2 = df.select('attr2').rdd.flatMap(lambda x: x).collect()
result = {k: v for k, v in zip(attr1, attr2)}

使用df.to_dict()怎么样?

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html

import pandas as pd
df = pd.DataFrame({'A1':['C','D','E', 'A'], 'A2':['B','C','B','C']})

   A1 A2
0  C  B
1  D  C
2  E  B
3  A  D

df = df.set_index('A1')
dict = df.to_dict()['A2']

结果是

dict = {'C': 'B', 'A': 'D', 'D': 'C', 'E': 'B'}

熊猫解决方案:

df.select('attr1','attr2').toPandas().set_index('Atr1')['Atr2'].to_dict()

注意: @mtoto的解决方案更加优雅,更快,并且需要更少的资源...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM