我有一个Spark数据框,如下所示,它填充了稀疏矢量但不是密集矢量:
objectVal.Indexes = indexVal.Cast<ushort>().ToArray();
众所周知,如果我尝试这样的话
+---+--------+-----+-------------+
|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])|
+---+--------+-----+-------------+
val rr=result.groupBy("id").agg(sum("index"))
scala> rr.show(false)
但是如何使用“groupBy”和“agg”来对稀疏矢量求和? 我希望最终的dataFrame像这样:
+---+----------+
|id |sum(index)|
+---+----------+
|e |1.0 |
|b |11.0 |
|a |3.0 |
+---+----------+
我认为VectorAssembler()可以解决这个问题,但我不知道如何编写代码,我应该使用udf吗?