pyspark:在某些情况下,为什么我不能将列作为属性引用?

6qfn3psc  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(231)

假设我有以下代码:

df = df \
    .withColumn('this_month_sales', df.units * df.rate) \
    .withColumn('this_year_sales_v1', df.this_month_sales + df.sales_till_last_month) \
    .withColumn('this_year_sales_v2', F.col('this_month_sales') + df.sales_till_last_month)

在这个代码中,
公式 this_year_sales_v1 会导致失败 this_month_sales 列不存在或不是属性或类似的内容。
公式 this_year_sales_v2 会有用的
为什么呢?他们本质上不是在做同样的事情吗?

lvmkulzt

lvmkulzt1#

因为在第三行 this_month_sales 原始列中不存在列 df . 它只在第二行中创建,但是 df 变量尚未更新。
如果你这样做

df = df \
    .withColumn('this_month_sales', df.units * df.rate)

df = df \
    .withColumn('this_year_sales_v1', df.this_month_sales + df.sales_till_last_month)

那么它应该会起作用,因为 this_month_sales 列现在是的属性 df 当第二行运行时。
一般来说,我更喜欢使用 F.col 为了防止这种问题。

相关问题