【发布时间】:2022-12-18 16:14:46
【问题描述】:
我是 PySpark 的新手,我看到有两种方法可以在 PySpark 中选择列,使用“.select()”或“.withColumn()”。
据我所知,“.withColumn()”的性能较差,但除此之外,我很困惑为什么有两种方法可以做同样的事情。
那么我什么时候应该使用“.select()”而不是“.withColumn()”呢?
我用谷歌搜索了这个问题,但没有找到明确的解释。
【问题讨论】:
我是 PySpark 的新手,我看到有两种方法可以在 PySpark 中选择列,使用“.select()”或“.withColumn()”。
据我所知,“.withColumn()”的性能较差,但除此之外,我很困惑为什么有两种方法可以做同样的事情。
那么我什么时候应该使用“.select()”而不是“.withColumn()”呢?
我用谷歌搜索了这个问题,但没有找到明确的解释。
【问题讨论】:
使用:
df.withColumn('new', func('old'))
func 是你的 spark 处理代码,相当于:
df.select('*', func('old').alias('new')) # '*' selects all existing columns
如您所见,withColumn() 使用起来非常方便(可能是它可用的原因),但是正如您所指出的,存在性能影响。详情见此贴:Spark DAG differs with 'withColumn' vs 'select'
【讨论】:
.withColumn() 不是用于选择列,而是返回一个带有新/替换列的新 DataFrame (docs)。
【讨论】:
@Robert Kossendey 您可以使用 select 链接多个 withColumn() 语句,而不会受到使用 withColumn 的性能影响。同样,在某些情况下,您可能希望/需要参数化创建的列。您可以为窗口、条件、值等设置变量来创建您的选择语句。
【讨论】: