【问题标题】:Why does my column exist in my pyspark dataframe after dropping it?为什么我的列在删除后存在于我的 pyspark 数据框中?
【发布时间】:2020-05-10 16:07:29
【问题描述】:

我正在使用 pyspark 版本 2.4.5 和 Databricks 运行时 6.5,我遇到了意外行为。我的代码如下:

import pyspark.sql.functions as F

df_A = spark.table(...)
df_B = df_A.drop(
    F.col("colA")
)
df_C = df_B.filter(
    F.col("colA") > 0
)

当我通过过滤 df_B 来分配 df_C 时,我预计会抛出一个错误,因为“colA”已被删除。但是当我运行这段代码时,它运行良好。这是预期的还是我错过了什么?

【问题讨论】:

    标签: pyspark databricks


    【解决方案1】:

    Spark 构建一个有意义的解释计划,并在filter 之后应用drop。您可以从解释计划中看到,例如

    spark.createDataFrame([('foo','bar')]).drop(col('_2')).filter(col('_2') == 'bar').explain()
    

    给予:

    == Physical Plan ==
    *(1) Project [_1#0]
    +- *(1) Filter (isnotnull(_2#1) && (_2#1 = bar))
       +- Scan ExistingRDD[_1#0,_2#1]
    

    在上面的解释计划中,被删除的列的投影发生在过滤器之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-15
      • 2020-05-20
      • 2020-07-24
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      相关资源
      最近更新 更多