Как переименовать имена столбцов в 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