将 pandas 转换为 pyspark 表达式

Posted

技术标签:

【中文标题】将 pandas 转换为 pyspark 表达式【英文标题】:turning pandas to pyspark expression 【发布时间】:2016-10-22 16:24:13 【问题描述】:

我需要将两列数据框转换为按其中一列分组的列表。我已经在 pandas 中成功完成了:

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 文档不包含类似的内容。

它的示例输入是数据框:

session     name
1           a
1           b
2           v
2           c

输出:

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

【问题讨论】:

能否分享示例数据和预期输出? @mtoto 是的,确定,完成! 试试这个:from pyspark.sql.functions import *; df.groupBy('session').agg(collect_list('name')) 【参考方案1】:

你也可以使用pyspark.sql.functions.collect_list(col)函数:

from pyspark.sql.functions import *

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

【讨论】:

【参考方案2】:

您可以使用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"])

【讨论】:

以上是关于将 pandas 转换为 pyspark 表达式的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas Python 转换为 Pyspark

将 pyspark groupedData 转换为 pandas DataFrame

将 pyspark 数据帧转换为 pandas 数据帧

将 Pyspark RDD 转换为 Pandas 数据框

将 Pandas 最佳拟合函数转换为 pyspark

如何使用 .str 和 .split 将 pandas 代码转换为 Pyspark