我有一些数据,我像这样取最大值:
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')
)
)