Python PySpark groupby元素及其出现的关键字

Python PySpark groupby元素及其出现的关键字,python,sql,apache-spark,dictionary,pyspark,Python,Sql,Apache Spark,Dictionary,Pyspark,我将此数据保存在数据框中: id,col 65475383,acacia 63975914,acacia 65475383,excelsa 63975914,better 我想要一个包含“word”列和与之相关的每个id的字典,如下所示: word:key acacia: 65475383,63975914 excelsa: 65475383 better: 63975914 我尝试了groupBy,但这是一种聚合数据的方法,如何解决这个问题?我不确定您是否打算将结果作为Python字典或数

我将此数据保存在数据框中:

id,col
65475383,acacia
63975914,acacia
65475383,excelsa
63975914,better
我想要一个包含“word”列和与之相关的每个id的字典,如下所示:

word:key
acacia: 65475383,63975914
excelsa: 65475383
better: 63975914

我尝试了groupBy,但这是一种聚合数据的方法,如何解决这个问题?

我不确定您是否打算将结果作为Python字典或数据帧(您的问题还不清楚)

但是,如果您确实需要数据帧,则计算该数据帧的一种方法是:

从pyspark.sql.functions导入收集列表
idsByWords=df\
.groupBy(“col”)\
.agg(收集列表(“id”)。别名(“id”))\
.WithColumn重命名(“col”、“word”)
这将导致:

idsByWords.show(truncate=False)
然后可以将该数据帧转换为Python字典:

d={r.asDict()[“word”]:r.asDict()[“ids”]用于idsByWords.collect()中的r
要最终获得:

{
“excelsa”:[65475383],
“更好”:[63975914],
‘金合欢’:[6547538363975914]
}

请注意,
collect
如果超出驱动程序内存,可能会导致驱动程序崩溃。

嗨,以太林!谢谢你的解决方案!是的,我的目的是使用字典值大于的广播变量dataframe@gammauniversity在这种情况下,请检查更新后的答案。嗯,我在最后看到了您的注释,我不打算使用collect,此字典将用作广播变量作为查找表
+-------+--------------------+
|word   |ids                 |
+-------+--------------------+
|excelsa|[65475383]          |
|better |[63975914]          |
|acacia |[65475383, 63975914]|
+-------+--------------------+