【问题标题】:Sum aggregation is returning null when ran on empty dataframe在空数据帧上运行时,总和聚合返回 null
【发布时间】:2022-11-18 05:48:41
【问题描述】:
我正在尝试运行以下查询:
df.filter(col("id") == id).agg(
F.sum(col("count")).alias("count")
)
在上面这个初始运行的示例中,df 将是一个空数据帧,因此过滤器会将计数设为 0。但是当在其上运行总和聚合时,它会给我计数为 1 的 result_df,如下所示:
+------------+
|计数
+------------+
|空|
+------------+
我希望 result_df 的大小为 0。任何人都可以帮助找出我做错了什么吗?
我也尝试将“count”列的数据类型更改为 long 但没有帮助。
【问题讨论】:
标签:
python-3.x
dataframe
apache-spark
pyspark
aggregate-functions
【解决方案1】:
我认为你可以使用 na.drop: na.drop example
在这里,我的示例类似于您添加的 na.drop
from pyspark.sql.functions import col
from pyspark.sql.functions import lit
df = spark.createDataFrame(
[("APPLE", "1"),
("APPLE", "2"),
("GRAPE", "3"),
("BANANA", "4"),
("BANANA", "5")],
["id", "count"]
)
df.filter(col("id") == F.lit("WRONG_ID_GIVING_EMPTY_DF")).agg(
F.sum(col("count")).alias("count")
).na.drop().show()
结果:
+-----+
|count|
+-----+
+-----+