Python 在pyspark中编写自定义UDAF

Python 在pyspark中编写自定义UDAF,python,pandas,pyspark,user-defined-functions,Python,Pandas,Pyspark,User Defined Functions,我需要编写pySpark自定义UDAF,我遇到了这个示例 . 在类似的行中,如线程的最后一部分所示,我提出了以下函数 from pyspark.sql.types import * schema = StructType([ StructField("key", StringType()), StructField("avg_value1", DoubleType()), StructField("avg_value2", DoubleType()), Stru

我需要编写pySpark自定义UDAF,我遇到了这个示例 . 在类似的行中,如线程的最后一部分所示,我提出了以下函数

from pyspark.sql.types import *

schema = StructType([
    StructField("key", StringType()),
    StructField("avg_value1", DoubleType()),
    StructField("avg_value2", DoubleType()),
    StructField("sum_avg", DoubleType()),
    StructField("sub_avg", DoubleType()),
    StructField("bf_signature", Binary())
])

@pandas_udf(schema, functionType=PandasUDFType.GROUPED_MAP)
def g(df):
    gr = df['key'].iloc[0]
    x = df.value1.mean()
    y = df.value2.mean()
    w = df.value1.mean() + df.value2.mean()
    z = df.value1.mean() - df.value2.mean()
    bloomfilter = BloomFilter(8, 1)
    bloomfilter.set(df.value1)
    p=bloomfilter
    return pd.DataFrame([[gr]+[x]+[y]+[w]+[z]+[p]])

df3.groupby("key").apply(g).show()
如代码所示,我想创建一个自定义BloomFilter,它将为整个列构建BloomFilter,类似于mean()函数处理聚合整个列并为每个组生成一个聚合结果

我如何用python编写这个自定义UDAF?

可能有用,这在python中不是一个真正的UDAF,但编写类似的功能是一种技巧

黑客是:

  • 将groupBy应用于DF
  • 在agg()函数中应用collect_list()
  • 将普通python UDF函数应用于collect_list()的结果列表

  • 我没有找到任何解决方案,所以切换到Java UserdefinedAggregateFunctionpyspark,现在支持熊猫的UDAF,看看这个