您好我需要将pyspark数据帧(或rdd)转换为字典,其中数据帧列为键,column_value_list为字典值。
name amt
a 10
b 20
a 30
b 40
c 50
我想要一本这样的字典:
new_dict = {'name':['a','b', 'a', 'b', 'c'], 'amt':[10,20,30,40,50]}
我该怎么做,(避免在rdd上收集是更好的解决方案)。感谢。
我也在尝试,会在一段时间内发布我的尝试。
答案 0 :(得分:2)
使用.toPandas
方法将spark数据帧转换为pandas数据帧,然后使用pandas的.to_dict
方法获取字典:
new_dict = spark_df.toPandas().to_dict(orient='list')
我不知道如何在不收集值的情况下将rdd
或spark df
字典排除在外。您可以使用.collectAsMap
的{{1}}方法,而无需先在数据框中转换数据:
rdd
我希望这会有所帮助。
答案 1 :(得分:1)
我遇到了同样的问题并且像这样解决了它(python 3.x,pyspark 2.x):
def columnDict(dataFrame):
colDict = dict(zip(dataFrame.schema.names, zip(*dataFrame.collect())))
return colDict if colDict else dict.fromkeys(dataFrame.schema.names, ())
如果你想要一个python字典,你必须先收集它。如果您不想收集,可以手动创建包含选定和映射的RDD的字典
colDict[col_name] = dataFrame.select(col_name).rdd.flatMap(lambda x: x)
与此解决方案类似:specified in the docs。