Using .when() with .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.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' object has no attribute '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')
)

并得到相同的错误。

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

相关内容

  • 没有找到相关文章

最新更新