J'ai un fichier de données comme indiqué ci-dessous puis-je transformer la structure de données ci-dessus vers ci-dessous en utilisant certains SQL? p> df.show () code>:
3 Réponses :
Vous pouvez le faire à l'aide d'une instruction SQL simple SELECT si vous souhaitez utiliser UDF aussi bien p>
EX -> Sélectionnez Col11, Col22, 'Expend1:' + Cast (Expend1 comme Varchar (10)) Comme Expend1, .... de la table p>
val df = Seq(("Value1", "value1", "123", "2264", "56"), ("Value1", "value2", "124", "2255", "23") ).toDF("Col11", "Col22", "Expend1", "Expend2", "Expend3")
val cols = df.columns.filter(!_.startsWith("Col")) // It will only fetch other than col% prefix columns
val getCombineData = udf { (colName:String, colvalue:String) => colName + ":"+ colvalue}
var in = df
for (e <- cols) {
in = in.withColumn(e, getCombineData(lit(e), col(e)) )
}
in.show
// results
+------+------+-----------+------------+----------+
| Col11| Col22| Expend1| Expend2| Expend3|
+------+------+-----------+------------+----------+
|Value1|value1|Expend1:123|Expend2:2264|Expend3:56|
|Value1|value2|Expend1:124|Expend2:2255|Expend3:23|
+------+------+-----------+------------+----------+
Vous pouvez utiliser l'idée de sortie: p> repliplez code> ici