如何在spark SQL中重命名列名

hba*_*bar 8 dataframe apache-spark-sql spark-dataframe

我有一个带有可配置列名的数据框,例如

Journey channelA channelB channelC
j1      1        0        0
j1      0        1        0
j1      1        0        0
j2      0        0        1 
j2      0        1        0
Run Code Online (Sandbox Code Playgroud)

通过可配置,我的意思是数据帧中可能有'n'个通道.

现在我需要进行转换,我需要找到所有通道的总和

df.groupBy("Journey").agg(sum("channelA"), sum("channelB"), sum("channelC"))
Run Code Online (Sandbox Code Playgroud)

其输出将是:

Journey sum(channelA) sum(channelB) sum(channelC)
j1      2             1             0
j2      0             1             1
Run Code Online (Sandbox Code Playgroud)

现在我想将列名重命名为原始名称,我可以使用

.withColumnRenamed("sum(channelA)", channelA)
Run Code Online (Sandbox Code Playgroud)

但正如我所提到的那样,通道列表是可配置的,我希望通用列重命名语句将所有求和列重命名为原始列名,以获得预期的数据帧:

Journey channelA channelB channelC
j1      2        1             0
j2      0        1             1
Run Code Online (Sandbox Code Playgroud)

任何建议如何处理这个

Umb*_*ffo 17

要重命名您的DataFrame列,您可以使用方法toDF(scala.collection.Seq colNames),您可以使用原始列名填充dinamically colNames.

所以你可以像这样填充dinamically序列:

val columnsRenamed = Seq("Journey", "channelA", "channelB","channelC") 
Run Code Online (Sandbox Code Playgroud)

然后调用方法toDF:

df = df.toDF(columnsRenamed: _*)
Run Code Online (Sandbox Code Playgroud)

: _*运算符的原因是将表单转换Seq[String]String*.