如何使用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
窗口
和分组方式
结合使用,如下所示:
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"))