把熊猫变成pyspark表达

时间:2016-10-22 16:24:14

标签: python pandas apache-spark group-by pyspark

我需要将两列Dataframe转换为按其中一列分组的列表。我在熊猫中成功完成了它:

expertsDF = expertsDF.groupby('session', as_index=False).agg(lambda x: x.tolist())

但是现在我想在pySpark中做同样的事情如下:

expertsDF = df.groupBy('session').agg(lambda x: x.collect())

我收到错误:

all exprs should be Column

我尝试了几个命令,但我根本无法做到。并且spark dokumentation不包含类似的东西。

它的示例输入是数据帧:

session     name
1           a
1           b
2           v
2           c

输出:

session    name
1          [a, b....]
2          [v, c....] 

2 个答案:

答案 0 :(得分:7)

您还可以使用pyspark.sql.functions.collect_list(col)功能:

from pyspark.sql.functions import *

df.groupBy('session').agg(collect_list('name'))

答案 1 :(得分:1)

您可以使用reduceByKey()来有效地执行此操作:

(df.rdd
 .map(lambda x: (x[0],[x[1]]))
 .reduceByKey(lambda x,y: x+y)
 .toDF(["session", "name"]).show())
+-------+------+
|session|  name|
+-------+------+
|      1|[a, b]|
|      2|[v, c]|
+-------+------+

数据

df = sc.parallelize([(1, "a"),
                     (1, "b"),
                     (2, "v"),
                     (2, "c")]).toDF(["session", "name"])