pyspark groupby元素及其出现键

8wtpewkr  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(495)

我在Dataframe中有这样的数据:

id,col
65475383,acacia
63975914,acacia
65475383,excelsa
63975914,better

我想要一个包含“word”列和与之相关的每个id的字典,类似这样:

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

我试过groupby,但那是一种聚合数据的方法,如何解决这个问题?

sg24os4d

sg24os4d1#

我不确定您是否打算将结果作为python字典或Dataframe(您的问题还不清楚)。
但是,如果您确实需要Dataframe,那么一种计算方法是:

from pyspark.sql.functions import collect_list

idsByWords = df \
    .groupBy("col") \
    .agg(collect_list("id").alias("ids")) \
    .withColumnRenamed("col", "word")

这将导致:

idsByWords.show(truncate=False)
+-------+--------------------+
|word   |ids                 |
+-------+--------------------+
|excelsa|[65475383]          |
|better |[63975914]          |
|acacia |[65475383, 63975914]|
+-------+--------------------+

然后可以将该Dataframe转换为python字典:

d = {r.asDict()["word"]: r.asDict()["ids"] for r in idsByWords.collect()}

最终获得:

{
   'excelsa': [65475383], 
   'better': [63975914], 
   'acacia': [65475383, 63975914]
}

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

相关问题