【问题标题】:PySpark Data Frames when to use .select() Vs. .withColumn()?PySpark Data Frames 何时使用 .select() 与。 .withColumn()?
【发布时间】:2022-12-18 16:14:46
【问题描述】:

我是 PySpark 的新手,我看到有两种方法可以在 PySpark 中选择列,使用“.select()”或“.withColumn()”。

据我所知,“.withColumn()”的性能较差,但除此之外,我很困惑为什么有两种方法可以做同样的事情。

那么我什么时候应该使用“.select()”而不是“.withColumn()”呢?

我用谷歌搜索了这个问题,但没有找到明确的解释。

【问题讨论】:

    标签: python pyspark


    【解决方案1】:

    使用:

    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'

    【讨论】:

      【解决方案2】:

      .withColumn() 不是用于选择列,而是返回一个带有新/替换列的新 DataFrame (docs)。

      【讨论】:

        【解决方案3】:

        @Robert Kossendey 您可以使用 select 链接多个 withColumn() 语句,而不会受到使用 withColumn 的性能影响。同样,在某些情况下,您可能希望/需要参数化创建的列。您可以为窗口、条件、值等设置变量来创建您的选择语句。

        【讨论】:

          猜你喜欢
          • 2020-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-14
          • 2020-04-06
          • 1970-01-01
          相关资源
          最近更新 更多