Вы почти у цели - просто отсутствует внутренний map
из 2-го элемента кортежа для сборки DenseVector:
import org.apache.spark.ml.linalg.Vectors
val rdd = sc.parallelize(Seq(
(("00001", 234), 7.0),
(("00001", 456), 6.0),
(("00001", 467), 3.0),
(("00002", 245), 8.0),
(("00002", 765), 9.0)
))
rdd.
groupBy(_._1._1).
map(t => (t._1, Vectors.dense(t._2.map(_._2).toArray))).
collect
// res1: Array[(String, org.apache.spark.ml.linalg.Vector)] =
// Array((00001,[7.0,6.0,3.0]), (00002,[8.0,9.0]))
Обратите внимание, что Vector.dense
принимает массив [Double], следовательно, toArray
.