具有“稀疏”向量组的数据帧通过聚合,使用 Scala 在火花中不密集向量

LIU*_*ENG 5 scala group-by apache-spark spark-dataframe apache-spark-mllib

我有一个如下所示的 Spark 数据框,它填充了稀疏向量但不是密集向量

+---+--------+-----+-------------+
|id |catagery|index|vec          |
+---+--------+-----+-------------+
|a  |ii      |3.0  |(5,[3],[1.0])|
|a  |ll      |0.0  |(5,[0],[1.0])|
|b  |dd      |4.0  |(5,[4],[1.0])|
|b  |kk      |2.0  |(5,[2],[1.0])|
|b  |gg      |5.0  |(5,[],[])    |
|e  |hh      |1.0  |(5,[1],[1.0])|
+---+--------+-----+-------------+
Run Code Online (Sandbox Code Playgroud)

众所周知,如果我像这样尝试

val rr=result.groupBy("id").agg(sum("index")) scala> rr.show(false)

  +---+----------+                                                                
  |id |sum(index)|
  +---+----------+
  |e  |1.0       |
  |b  |11.0      |
  |a  |3.0       |
  +---+----------+
Run Code Online (Sandbox Code Playgroud)

但是如何使用“groupBy”和“agg”来求和稀疏向量?我想要这样的最终数据帧:

      +---+-------------------------+                              
      |id |   vecResult             |
      +---+-------------------------+
      |a  |(5,[0,3],[1.0,1.0])      |
      |b  |(5,[2,4,5],[1.0,1.0,1.0])|
      |e  |(5,[1],[1.0])            |
      +---+-------------------------+
Run Code Online (Sandbox Code Playgroud)

我觉得 VectorAssembler() 可以解决这个问题,但是我不知道怎么写代码,我应该使用 udf 吗?