web-dev-qa-db-fra.com

Scala Spark DataFrame: dataFrame.select plusieurs colonnes en fonction d'une séquence de noms de colonnes

val columnName=Seq("col1","col2",....."coln");

Existe-t-il un moyen d'effectuer l'opération dataframe.select pour obtenir dataframe contenant uniquement les noms de colonne spécifiés. Je sais que je peux faire dataframe.select("col1","col2"...) mais le columnName est généré au moment de l'exécution. Je pourrais faire dataframe.select() à plusieurs reprises pour chaque nom de colonne dans une boucle. Y aura-t-il des frais généraux de performance ?. Y a-t-il un autre moyen plus simple d'accomplir cela?

23
Himaprasoon
val columnNames = Seq("col1","col2",....."coln")

// using the string column names:
val result = dataframe.select(columnNames.head, columnNames.tail: _*)

// or, equivalently, using Column objects:
val result = dataframe.select(columnNames.map(c => col(c)): _*)
46
Tzach Zohar

Puisque dataFrame.select() s'attend à une séquence de colonnes et que nous avons une séquence de chaînes, nous devons convertir notre séquence en un List sur cols et convertir cette liste en séquence. columnName.map(name => col(name)): _* donne une séquence de colonnes à partir d'une séquence de chaînes, qui peut être passée en paramètre à select():

  val columnName = Seq("col1", "col2")
  val DFFiltered = DF.select(columnName.map(name => col(name)): _*)
2
UserszrKs