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 次 |
最近记录: |