【问题标题】:Using .when() with .agg()使用 .when() 和 .agg()
【发布时间】:2021-03-03 00:43:28
【问题描述】:

我有一些数据,我正在采取这样的最大值:

t = (
    spark.table('schema.t1')
    .where(F.col('yyyy_mm_dd').between('2020-01-01', '2021-01-01'))
    .select('id', 'is_enabled')
    .groupby('id')
    .agg(
        sf.max('is_enabled').alias('is_enabled')
    )
)

is_enabled 中的数据是 1/0,我想分别用 'true' 和 'false' 替换它。

我试过这个:

t = (
    spark.table('schema.t1')
    .where(F.col('yyyy_mm_dd').between('2020-01-01', '2021-01-01'))
    .select('id', 'is_enabled')
    .groupby('id')
    .agg(
        sf.max('is_enabled').alias('is_enabled')
    )
    .when(sf.col('is_enabled') == 0, 'false')
    .otherwise('true')
)

但我收到此错误:

AttributeError: 'DataFrame' 对象没有属性 'when'

我也试过了:

t = (
    spark.table('schema.t1')
    .where(F.col('yyyy_mm_dd').between('2020-01-01', '2021-01-01'))
    .select('id', 'is_enabled')
    .groupby('id')
    .agg(
        sf.max('is_enabled').alias('is_enabled')
    )
)

t = (
    t
    .when(sf.col('is_enabled') == 0, 'false')
    .otherwise('true')
)

得到了同样的错误。

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您可以使用withColumn 更改列,并将when 语句放在withColumn 内:

    t = (
        spark.table('schema.t1')
        .where(F.col('yyyy_mm_dd').between('2020-01-01', '2021-01-01'))
        .select('id', 'is_enabled')
        .groupby('id')
        .agg(
            sf.max('is_enabled').alias('is_enabled')
        )
        .withColumn(
            'is_enabled', 
            sf.when(sf.col('is_enabled') == 0, 'false').otherwise('true')
        )
    )
    

    或者您可以将when 语句放在agg 中:

    t = (
        spark.table('schema.t1')
        .where(F.col('yyyy_mm_dd').between('2020-01-01', '2021-01-01'))
        .select('id', 'is_enabled')
        .groupby('id')
        .agg(
            sf.when(sf.max('is_enabled') == 0, 'false')
              .otherwise('true').alias('is_enabled')
        )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2012-08-18
      相关资源
      最近更新 更多