我想将以下熊猫代码转换为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
,(另外两个很好用)。
有什么主意吗?
答案 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 我希望这会有所帮助!