在多列上使用 df.withColumn()

Posted

技术标签:

【中文标题】在多列上使用 df.withColumn()【英文标题】:Using df.withColumn() on multiple columns 【发布时间】:2018-04-23 13:04:07 【问题描述】:

我正在使用 python 和 pyspark 来扩展 SPSS Modeler。

我想操作大约 5000 列,因此使用以下构造:

for target in targets:
    inputData = inputData.withColumn(target+appendString, function(target))

这很慢。是否有更有效的方法对所有目标列执行此操作?

targets 包含要使用的列名列表,function(target) 是一个占位符,我可以在其中处理不同的列,例如添加和除法。

如果你能帮助我,我会很高兴:)

潘达约

【问题讨论】:

【参考方案1】:

试试这个:

inputData.select(
    '*', 
    *(function(target).alias(target+appendString) for target in targets)
)

【讨论】:

你能比较一下这个方法和OP提出的方法的执行计划吗?我怀疑,虽然这看起来更整洁,但它实际上在做同样的事情。 此方法不会每次都重新影响数据帧。您只生成一个数据框。但是,是的,否则执行计划可能是相同的 谢谢,这很有帮助。

以上是关于在多列上使用 df.withColumn()的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL UDF 使用 df.WithColumn() 返回 scala 不可变映射

Spark:将多列分解为一列

pyspark Column 不可使用 withColumn 进行迭代

具有三个条件的pyspark df.withColumn

PySpark SQL:合并 .withColumn 调用

PySpark:withColumn() 有两个条件和三个结果