web-dev-qa-db-fra.com

Spark DataFrame et renommage de plusieurs colonnes (Java)

Existe-t-il un moyen plus agréable de préfixer ou de renommer toutes les colonnes ou plusieurs en même temps d'un nom SparkSQL DataFrame donné en appelant plusieurs fois dataFrame.withColumnRenamed()?

Un exemple serait si je veux détecter les modifications (en utilisant une jointure externe complète). Il me reste alors deux DataFramename__s avec la même structure.

9
JiriS

Je suggère d'utiliser la méthode select () pour effectuer cela. En fait, la méthode withColumnRenamed () utilise select () seule. Voici un exemple comment renommer plusieurs colonnes:

import org.Apache.spark.sql.functions._

val someDataframe: DataFrame = ...

val initialColumnNames = Seq("a", "b", "c")
val renamedColumns = initialColumnNames.map(name => col(name).as(s"renamed_$name"))
someDataframe.select(renamedColumns : _*)
11
Zyoma

Je viens de trouver la réponse 

df1_r = df1.select(*(col(x).alias(x + '_df1') for x in df1.columns))

at stackoverflow here (voir la fin de la réponse acceptée)

0
lanenok
or (a <- 0 to newsales.columns.length - 1) 
{ 
 var new_c = newsales.columns(a).replace('(','_').replace(')',' ').trim  
 newsales_var = newsales.withColumnRenamed(newsales.columns(a),new_c) 
}
0
Devndra