PySpark有一组很好的 聚合 函数(例如, count,countDistinct,min,max,avg,sum ),但这些并不适用于所有情况(特别是如果你试图避免代价高昂的Shuffle操作)。

PySpark目前有 pandas_udfs ,它可以创建自定义聚合器,但是你一次只能“应用”一个pandas_udf。 如果你想使用多个,你必须预先形成多个groupBys ......并且避免那些改组。

在这篇文章中,我描述了一个小黑客,它使您能够创建简单的python UDF,它们对聚合数据起作用(此功能只应存在于Scala中!)。

[ 1 , 1 , 'b' ], [ 1 , 2 , 'b' ], [ 2 , 1 , 'c' ]]) . toDF ([ 'id' , 'value1' , 'value2' ]) a . show ()