我有一个类似于下面Spark中的数据框,我想按id列对其进行分组,然后对于分组数据中的每一行,我需要创建一个稀疏向量,其中包含weight列中指定的索引处的index列.稀疏矢量的长度是已知的,例如1000.
数据帧df:
+-----+------+-----+
| id|weight|index|
+-----+------+-----+
|11830| 1| 8|
|11113| 1| 3|
| 1081| 1| 3|
| 2654| 1| 3|
|10633| 1| 3|
|11830| 1| 28|
|11351| 1| 12|
| 2737| 1| 26|
|11113| 3| 2|
| 6590| 1| 2|
+-----+------+-----+
Run Code Online (Sandbox Code Playgroud)
我读过这个类似于我想做的事情,但是对于一个rdd.有没有人知道使用Scala在Spark中为数据框执行此操作的好方法?
到目前为止,我的尝试是首先收集权重和索引,如下所示:
val dfWithLists = df
.groupBy("id")
.agg(collect_list("weight") as "weights", collect_list("index") as "indices"))
Run Code Online (Sandbox Code Playgroud)
看起来像:
+-----+---------+----------+
| id| weights| indices|
+-----+---------+----------+
|11830| [1, 1]| [8, 28]|
|11113| [1, 3]| [3, …Run Code Online (Sandbox Code Playgroud)