/ / Conversion de DataFrame spark en matrice MlLib - scala, apache-spark, spark-dataframe, apache-spark-mllib

Convertir spark DataFrame en MlLib Matrix - scala, apache-spark, spark-dataframe, apache-spark-mllib

J'ai besoin de créer des tables de contingence dans Scala Spark. J'ai essayé de développer mon code comme ci-dessous. J'ai besoin de convertir org.apache.spark.sql.DataFrame à org.apache.spark.mllib.linalg.Matrix. J'ai beaucoup cherché; mais j'ai le plus trouvé des échantillons de la matrice à DataFrame. Merci d'avance pour votre aide C'est mon DataFrame

scazla> val ff: df.stat.crosstab("firstAttr", "secondAttr")
scala> val myDf = ff.select("no", "yes")
myDf: org.apache.spark.sql.DataFrame = [no: bigint, yes: bigint]

scala> myDf.show()
+---+---+
| no|yes|
+---+---+
|332| 16|
|180| 13|
| 20|  3|
| 21|  3|
+---+---+

Réponses:

0 pour la réponse № 1

Importations requises

import org.apache.spark.mllib.linalg.{Matrix, Matrices}
import org.apache.spark.sql.Row

Les données:

val df = Seq((332, 16), (180, 13), (20, 3), (21, 3)).toDF("no", "yes")

Aplatir et collecter le résultat:

val values = df
.select($"no".cast("double"), $"yes".cast("double"))
.map { case Row(yes: Double, no: Double) => Seq(yes, no) }
.collect
.toSeq
.transpose
.flatten

Créer Matrix:

 Matrices.dense(df.count.toInt, df.columns.size, values.toArray)
// res8: org.apache.spark.mllib.linalg.Matrix =
// 332.0  16.0
// 180.0  13.0
// 20.0   3.0
// 21.0   3.0