数据帧与“稀疏”矢量groupBy聚合,而不是密集使用Scala的火花矢量

时间:2017-06-15 07:26:48

标签: scala apache-spark group-by spark-dataframe apache-spark-mllib

我有一个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吗?

0 个答案:

没有答案