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