pyspark数据框到字典:列作为键和列值列表ad dict值

时间:2017-04-28 12:07:10

标签: python pyspark

您好我需要将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上收集是更好的解决方案)。感谢。

我也在尝试,会在一段时间内发布我的尝试。

2 个答案:

答案 0 :(得分:2)

使用.toPandas方法将spark数据帧转换为pandas数据帧,然后使用pandas的.to_dict方法获取字典:

new_dict = spark_df.toPandas().to_dict(orient='list')

编辑:

我不知道如何在不收集值的情况下将rddspark 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