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 吗?
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |