Пример кода spark svd выглядит следующим образом
val data = Array(
Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))),
Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0),
Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0))
val rows = sc.parallelize(data)
val mat: RowMatrix = new RowMatrix(rows)
val svd: SingularValueDecomposition[RowMatrix, Matrix] = mat.computeSVD(5, computeU = true)
Теперь проблема заключается в том, как создать объект данных rdd [Vectors.sparse], чтобы соответствовать функции svd.Данные выглядят следующим образом, это тип Vectors.sparse
{"type":0,"size":205209,"indices":[24119,32380,201090],"values":
[1.8138314440983385,1.6036455249478836,1.3787660101958308]}
{"type":0,"size":205209,"indices":[24119,32380,176747,201090],"values":
[5.441494332295015,3.207291049895767,3.2043056252302478,2.7575320203916616]}
Пока я пробовал это
val rows = df_raw_features.select("raw_features").rdd.map(Vectors.sparse).map(Row(_))
Я получил эту ошибку
[error] /home/lujunchen/project/spark_code/src/main/scala/svd_feature_engineer.scala:39:71: type mismatch;
[error] found : (size: Int, elements: Iterable[(Integer, Double)])org.apache.spark.mllib.linalg.Vector <and> (size: Int, elements: Seq[(Int, Double)])org.apache.spark.mllib.linalg.Vector <and> (size: Int, indices: Array[Int], values: Array[Double])org.apache.spark.mllib.linalg.Vector
[error] required: org.apache.spark.sql.Row => ?
[error] val rows = df_raw_features.select("raw_features").rdd.map(Vectors.sparse).map(Row(_))