Как переименовать имена столбцов в spark SQL

у меня есть фрейм данных с настраиваемыми именами столбцов, например

Journey channelA channelB channelC
j1      1        0        0
j1      0        1        0
j1      1        0        0
j2      0        0        1 
j2      0        1        0

под настраиваемым я имею в виду, что в фрейме данных могут быть " n " каналов.

теперь мне нужно преобразование, в котором мне нужно найти сумму всех каналах что-то вроде

df.groupBy("Journey").agg(sum("channelA"), sum("channelB"), sum("channelC"))

выход которого был бы:

Journey sum(channelA) sum(channelB) sum(channelC)
j1      2             1             0
j2      0             1             1

теперь я хочу переименовать имена столбцов в исходные имена, и я мог бы сделать это с

.withColumnRenamed("sum(channelA)", channelA)

но как я уже упоминал канала список настраивается, и я хотел бы, чтобы оператор generic column rename переименовал все мои суммированные столбцы в исходные имена столбцов, чтобы получить ожидаемый фрейм данных как:

Journey channelA channelB channelC
j1      2        1             0
j2      0        1             1

любые предложения, как подойти к этому

2 ответов


для динамического переименования столбцов вашего фрейма данных вы можете использовать метод toDF (scala.коллекция.Seq colNames), С whitch вы можете заполнить dinamically colNames с оригинальными именами столбцов.

таким образом, вы можете заполнить динамически последовательность, как это:

val columnsRenamed = Seq("Journey", "channelA", "channelB","channelC") 

а затем вызовите метод toDF:

df = df.toDF(columnsRenamed: _*)

причина : _* оператор должен привести форму Seq[String] to String*.


Это также может быть переименован следующим образом, Скажем, входной df имеет форму inputDf: DataFrame со столбцами _1, _2.

val newDf = inputDf.selectExpr("_1 as x1", "_2 as X2")
* as -> maps to alias

другие подробные ответы можно найти здесь: переименование имен столбцов фрейма данных в spark scala