Apache Spark 在scala中重命名 Dataframe 多列

zpf6vheq  于 2022-11-30  发布在  Apache
关注(0)|答案(1)|浏览(164)

我想重命名我在Seq中提供的 Dataframe 中的一些列。我使用以下方法:

def prefixColumns(dataframe: DataFrame, columnPrefix: String, cols: Seq[String]) : DataFrame = {
    for (column <- dataframe.columns){
        if(cols.contains(column)){
            dataframe.withColumnRenamed(column, columnPrefix + "_" + column)
        }
    }
    dataframe
}

并调用prefix(products, "products", Seq(col1,col2,col3,col4))
它只是将col4重命名为products_col4,其他列保持不变。
有人能给我一个在scala中实现这一点的方法吗?
我只想按原样重命名序列中提供的列和 Dataframe 的其他列。

nbysray5

nbysray51#

你的函数没有重命名任何东西,因为withColumnRenamed不转换它被调用的对象。它返回一个新的对象,列被重命名。让我们检查一下:
第一个
但您可以稍微调整一下函数,使其正常工作:
第一个
注意:另一种方法是像这样使用select。没有for循环:

dataframe.select( dataframe.columns.map(c => 
    if(cols contains c) col(c).alias(columnPrefix + "_" + c) else col(c) 
) : _*)

相关问题