使用.when()和.agg()

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

我有一些数据,我最大化了如下:

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')
)

也犯了同样的错误。

ycggw6v2

ycggw6v21#

你可以用 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')
    )
)

相关问题