2016-09-29 2 views
6

У меня есть dataframe с конфигурируемые имена столбцов, напримерКак переименовать имена столбцов в свече 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 

конфигурируемые я имею в виду не может быть «п» каналы в dataframe.

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

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) 

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

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

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

ответ

15

Чтобы переименовать динамически в столбцах DataFrame вы можете использовать метод toDF (scala.collection.Seq colNames), при этом вы можете заполнить динамически colNames с именами исходных столбцов.

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

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

, а затем вызвать метод toDF:

df = df.toDF(columnsRenamed: _*) 

Причиной : _* оператора является литая форма Seq[String] к String*.

0

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

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

Другие подробные ответы можно найти здесь: Renaming Column names of a Data frame in spark scala

Смежные вопросы