Spark DataFrame并重命名多个列(Java)

有没有更好的方法在给定的SparkSQL DataFrame同时为所有或多个列添加前缀或重命名,而不是多次调用dataFrame.withColumnRenamed()

例如,如果我想检测更改(使用完全外连接)。 然后我留下两个具有相同结构的DataFrame

我建议使用select()方法来执行此操作。 实际上withColumnRenamed()方法本身使用select()。 以下是如何重命名多个列的示例:

 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 : _*) 

我刚刚找到了答案

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

在stackoverflow这里 (参见接受答案的结尾)

 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) } 

虽然它没有直接回答你的问题,但我总是逐个更新列名。 由于它仅更新DF元数据,因此逐个更新列名不会有任何损害(不会影响性能),例如:

 for c in DF.columns: new_c = c.strip().replace(' ','_') DF = DF.withColumnRenamed(c, new_c)