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

时间:2019-11-25 09:31:12

标签: python pandas group-by pyspark

我想将以下熊猫代码转换为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"))

但是,any()中没有聚合函数pyspark.sql.function,(另外两个很好用)。

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

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

  

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

     

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

     

请注意,此函数是不确定性的,因为其结果取决于行的顺序,这些顺序在洗牌后可能是不确定性的。

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