Sau*_*Das 4 null aggregate apache-spark apache-spark-sql pyspark
我遇到的情况是,列中可能有空值,需要在组中求和。
如果我在组中遇到空值,我希望该组的总和为空。但 PySpark 默认情况下似乎会忽略空行并对其余非空值求和。
例如:
dataframe = dataframe.groupBy('dataframe.product', 'dataframe.price') \
.agg(f.sum('price'))
Run Code Online (Sandbox Code Playgroud)
预期输出是:
但我得到:
sum仅当该列的所有值均为空时,函数才返回 NULL,否则将忽略空值。
您可以使用条件聚合,如果count(price) == count(*)这意味着不存在空值并且我们返回sum(price)。否则,返回 null:
from pyspark.sql import functions as F
df.groupby("product").agg(
F.when(F.count("price") == F.count("*"), F.sum("price")).alias("sum_price")
).show()
#+-------+---------+
#|product|sum_price|
#+-------+---------+
#| B| 200|
#| C| null|
#| A| 250|
#+-------+---------+
Run Code Online (Sandbox Code Playgroud)
从Spark 3.0+开始,还可以使用any函数:
df.groupby("product").agg(
F.when(~F.expr("any(price is null)"), F.sum("price")).alias("sum_price")
).show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6671 次 |
| 最近记录: |