如何使用pandas_udf接口编写pyspark函数?

如何使用pandas_udf接口编写pyspark函数?,pyspark,group-by,user-defined-functions,window-functions,Pyspark,Group By,User Defined Functions,Window Functions,我必须使用计算分组数据模式的函数 世界民主联盟: Pypark函数 熊猫UDF可以与窗口和分组方式结合使用,如下所示: df.withColumn("mode", mode(df["x"], tie_preference="higher").over(Window.partitionBy("a"))) df.groupBy("a").agg(mode(df["x"], tie

我必须使用计算分组数据模式的函数

  • 世界民主联盟:
  • Pypark函数
  • 熊猫UDF可以与
    窗口
    分组方式
    结合使用,如下所示:

    df.withColumn("mode", mode(df["x"], tie_preference="higher").over(Window.partitionBy("a")))
    
    df.groupBy("a").agg(mode(df["x"], tie_preference="lower").alias("mode"))
    
    我怎样才能编写一个像pandas UDF那样使用的pyspark函数/类

    def get_mode_per_group(df, mode_col, new_col_name, partition_by, tie_preference="lower"):
        tie_configured_col = F.col(mode_col) if tie_preference == "lower" else F.col(mode_col).desc()
        return (
            df.groupBy(*partition_by, mode_col)
            .count()
            .withColumn(
                new_col_name,
                F.first(mode_col).over(
                    Window
                    .partitionBy(*partition_by)
                    .orderBy(F.col("count").desc(), tie_configured_col)
                ),
            )
            .select(*partition_by, new_col_name)
            .drop_duplicates()
        )
    
    df.withColumn("mode", mode(df["x"], tie_preference="higher").over(Window.partitionBy("a")))
    
    df.groupBy("a").agg(mode(df["x"], tie_preference="lower").alias("mode"))