使用此数据框:
from pyspark.sql import functions as F
df = spark.createDataFrame([(None,), (1,), (2,)], ['col_name'])
df.show()
# +--------+
# |col_name|
# +--------+
# | null|
# | 1|
# | 2|
# +--------+
计算
MAX
默认忽略空值:
max = F.max('col_name').alias('col_name')
df.agg(max).show()
# +--------+
# |col_name|
# +--------+
# | 2|
# +--------+
有没有办法使用
MAX
进行聚合,但不忽略空值?如果存在 null,则应返回 null。
我们可以这样做,但它相当冗长......
max = F.when(F.expr("every(col_name is not null)"), F.max("col_name")).alias("col_name")
df.agg(max).show()
# +--------+
# |col_name|
# +--------+
# | null|
# +--------+
Spark 3.5+(短一点):
max = F.when(F.every(~F.isnull('col_name')), F.max("col_name")).alias("col_name")
df.agg(max).show()