0
votes

Manipulation de la table d'allumage - Valeurs de colonne aux lignes et valeurs de ligne transposées

J'ai le jeu de données suivant

 Entrez la description de l'image ici

Et je veux convertir ceci en ci-après avec Spark. Tous les pointeurs seraient utiles.

 Entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

J'ai fait une méthode il y a quelque temps pour le faire: xxx

Vous pouvez l'utiliser comme ceci: xxx

donne xxx


0 commentaires

1
votes

Spark 2.4.3 Vous pouvez mapper mapper_from_array et c'est une fonction assez droite et une fonction intégrée. xxx

Appliquer map_from_array et explosera que cela donnera le résultat souhaité xxx

Je pense que la fonction intégrée donnera plus de performances par rapport à UDF.


0 commentaires

0
votes

Vous pouvez également faire en utilisant la fonction de pile aussi.

Voici un exemple de code pour l'essayer. p>

val df = Seq((1,40,60,10), (2,34,10,20), (3,87,29,62) ).toDF("cust_id","100x","200x","300x")
df.show()
scala> df.show()
+-------+----+----+----+
|cust_id|100x|200x|300x|
+-------+----+----+----+
|      1|  40|  60|  10|
|      2|  34|  10|  20|
|      3|  87|  29|  62|
+-------+----+----+----+

val skipColumn = "cust_id"
var columnCount = df.schema.size -1
df.columns
var columnsStr = ""
var counter = 0
for ( col <- df.columns ) {
    counter = counter + 1
    if(col != skipColumn) {
        if(counter == df.schema.size) {
        columnsStr = columnsStr + s"'$col', $col"    
    }
    else {
        columnsStr = columnsStr + s"'$col', $col,"
    }
    }
}
val unPivotDF = df.select($"cust_id",
expr(s"stack($columnCount, $columnsStr) as (Sid,Value)"))
unPivotDF.show()

scala> unPivotDF.show()
+-------+----+-----+
|cust_id| Sid|Value|
+-------+----+-----+
|      1|100x|   40|
|      1|200x|   60|
|      1|300x|   10|
|      2|100x|   34|
|      2|200x|   10|
|      2|300x|   20|
|      3|100x|   87|
|      3|200x|   29|
|      3|300x|   62|
+-------+----+-----+


0 commentaires