PySpark数据帧上的自定义聚合

use*_*666 6 aggregate-functions user-defined-functions apache-spark apache-spark-sql pyspark

我有一个PySpark DataFrame,其中一列作为一个热编码向量.我想在groupby之后通过向量加法来聚合不同的一个热编码向量

例如 df[userid,action] Row1: ["1234","[1,0,0]] Row2: ["1234", [0 1 0]]

我希望输出为行:["1234", [ 1 1 0]]因此向量是所有向量分组的总和userid.

我怎样才能做到这一点?PySpark sum聚合操作不支持向量加法.

Ass*_*son 8

你有几个选择:

  1. 创建用户定义的聚合函数.问题是你需要在scala中编写用户定义的聚合函数并将其包装在python中使用.
  2. 您可以使用collect_list函数将所有值收集到列表中,然后编写UDF以组合它们.
  3. 您可以移动到RDD并按键使用聚合或聚合.

选项2和3都是相对低效的(花费cpu和内存).

  • @ThomasB.3是低效的,因为你会失去所有的数据帧的优化(如催化剂的优化,整个舞台的代码生成等),因为你的输入数据帧,也需要将数据从数据帧表示,以RDD表示转换.最后,在python中,所有RDD操作基本上都将数据序列化为python,对它们进行python操作并返回相对较慢的结果. (3认同)

归档时间:

查看次数:

6030 次

最近记录:

7 年,4 月 前