我想使用 spark withColumnRenamed 函数更改两列的名称。当然,我可以写:
data = sqlContext.createDataFrame([(1,2), (3,4)], ['x1', 'x2'])
data = (data
.withColumnRenamed('x1','x3')
.withColumnRenamed('x2', 'x4'))
但我想一步完成(有新名称的列表/元组)。不幸的是,这两者都不是:
data = data.withColumnRenamed(['x1', 'x2'], ['x3', 'x4'])
也不是这个:
data = data.withColumnRenamed(('x1', 'x2'), ('x3', 'x4'))
正在工作。有可能这样做吗?
最佳答案
不能使用单个 withColumnRenamed
称呼。
DataFrame.toDF
方法*data.toDF('x3', 'x4')
或者
new_names = ['x3', 'x4']
data.toDF(*new_names)
select
重命名:from pyspark.sql.functions import col
mapping = dict(zip(['x1', 'x2'], ['x3', 'x4']))
data.select([col(c).alias(mapping.get(c, c)) for c in data.columns])
同样在 Scala 中,您可以:
val newNames = Seq("x3", "x4")
data.toDF(newNames: _*)
select
:val mapping = Map("x1" -> "x3", "x2" -> "x4")
df.select(
df.columns.map(c => df(c).alias(mapping.get(c).getOrElse(c))): _*
)
或
foldLeft
+ withColumnRenamed
mapping.foldLeft(data){
case (data, (oldName, newName)) => data.withColumnRenamed(oldName, newName)
}
* 不要与
RDD.toDF
混淆这不是可变参数函数,并将列名作为列表,
关于apache-spark - PySpark - 使用 withColumnRenamed 重命名多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38798567/