PySpark 中是不是有与 Pandas 聚合函数 any() 等效的函数?

Posted

技术标签:

【中文标题】PySpark 中是不是有与 Pandas 聚合函数 any() 等效的函数?【英文标题】:Is there function in PySpark that is equivalent to Pandas aggregate function any()?PySpark 中是否有与 Pandas 聚合函数 any() 等效的函数? 【发布时间】:2019-11-25 09:31:12 【问题描述】:

我想将以下 pandas 代码翻译成 PySpark 代码

pd_df.groupby(['colA']).agg(newCol1 = ('colB', 'count'),
                            newCol2 = ('colC', 'mean'))
                            newCol3 = ('colD', 'any')).reset_index()

等效的 PySpark 代码是

import pyspark.sql.functions as F
ps_df.groupBy(['colA']) \
    .agg(F.count("colB").alias('newCol1'),
         F.mean("colC").alias("newCol2"),
         F.any("colD").alias("newCol3"))

但是,pyspark.sql.function 中没有聚合函数 any(),(其他两个工作正常)。

有什么想法吗?

【问题讨论】:

没有内置的实现 【参考方案1】:

any() 没有内置实现。相反,我建议使用first(),因为它可能具有相同的用途,并且在计算上它不会导致大的重新洗牌。来自pyspark 文档:

聚合函数:返回组中的第一个值。

该函数默认返回它看到的第一个值。当 ignoreNulls 设置为 true 时,它​​将返回它看到的第一个非空值。如果所有值都为 null,则返回 null。

注意该函数是不确定的,因为它的结果取决于行的顺序,在洗牌后可能是不确定的。

如果您想了解更多信息,请参阅https://spark.apache.org/docs/2.4.3/api/python/pyspark.sql.html#pyspark.sql.functions.first 我希望这会有所帮助!

【讨论】:

以上是关于PySpark 中是不是有与 Pandas 聚合函数 any() 等效的函数?的主要内容,如果未能解决你的问题,请参考以下文章

具有多个聚合的 pyspark groupBy(如 pandas)

PySpark 中是不是有与 scikit-learn 的 sample_weight 等效的参数?

pandas 中是不是有与 .groupby 相对的“ungroup by”操作?

PySpark中pandas_udf的隐式模式?

在 pyspark 中,是不是可以使用 1 个 groupBy 进行 2 个聚合?

(Pyspark - 在一段时间内按用户分组