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 № 1Importations 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