Comment changer la position d'une colonne dans une base de données spark?
je me demandais s'il était possible de changer la position d'une colonne dans une base de données, en fait de changer le schéma ?
Justement si j'ai un dataframe comme [champ1, champ2, champ3], et je voudrais obtenir [champ1, champ3, champ2].
Toute aide serait grandement appréciée !
Merci.
Edit : je ne peux pas mettre n'importe quel morceau de code. Imaginons que nous travaillons avec une base de données avec cent colonnes, après quelques jointures et trnsformations, certaines de ces colonnes sont mal placées en ce qui concerne le schéma de la table de destination. Donc mon point est : comment déplacer une ou plusieurs colonnes, I. e: comment changer le schéma ?
Merci.
4 réponses
Vous pouvez obtenir les noms des colonnes, les réorganiser comme vous le voulez, et ensuite utiliser select
sur l'original DataFrame pour obtenir une nouvelle avec ce nouvel ordre:
val columns: Array[String] = dataFrame.columns
val reorderedColumnNames: Array[String] = ??? // do the reordering you want
val result: DataFrame = dataFrame.select(reorderedColumnNames.head, reorderedColumnNames.tail: _*)
comme d'autres ont commenté, Je suis curieux de savoir pourquoi vous feriez cela car l'ordre n'est pas pertinent quand vous pouvez interroger les colonnes par leurs noms.
quoi qu'il en soit, l'utilisation d'un select devrait donner l'impression que les colonnes ont bougé dans la description du schéma:
val data = Seq(
("a", "hello", 1),
("b", "spark", 2)
)
.toDF("field1", "field2", "field3")
data
.show()
data
.select("field3", "field2", "field1")
.show()
une toute petite version différente comparer à @Tzach Zohar
val cols = df.columns.map(df(_)).reverse
val reversedColDF = df.select(cols:_*)
spark-daria la bibliothèque dispose d'un reorderColumns
méthode qui permet de réordonner facilement les colonnes dans une base de données.
import com.github.mrpowers.spark.daria.sql.DataFrameExt._
val actualDF = sourceDF.reorderColumns(
Seq("field1", "field3", "field2")
)
si vous voulez obtenir l'ordre des colonnes de df1
pour égaler l'ordre des colonnes de df2
, quelque chose comme cela devrait fonctionner mieux que de coder en dur toutes les colonnes:
df1.reorderColumns(df2.columns)
spark-daria bibliothèque définit également un sortColumns
transformation pour trier les colonnes en ordre ascendant ou descendant (si vous ne voulez pas spécifier toutes les colonnes dans une séquence).
import com.github.mrpowers.spark.daria.sql.transformations._
df.transform(sortColumns("asc"))