【问题标题】:How to rename column names in spark SQL如何在 Spark SQL 中重命名列名
【发布时间】:2017-02-07 05:04:10
【问题描述】:

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

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)

但正如我所提到的,频道列表是可配置的,我想要一个通用的列重命名语句将我所有的汇总列重命名为原始列名,以获得预期的数据框:

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

任何建议如何解决这个问题

【问题讨论】:

    标签: dataframe apache-spark-sql spark-dataframe


    【解决方案1】:

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

    所以你可以动态地填充这样的序列:

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

    然后调用toDF的方法:

    df = df.toDF(columnsRenamed: _*)
    

    : _* 运算符的原因是将Seq[String] 的形式转换为String*

    【讨论】:

      【解决方案2】:

      也可以通过以下方式重命名, 假设输入 df 的形式为 inputDf: DataFrame with columns _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

      【讨论】:

        猜你喜欢
        • 2016-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多