dataframe记录数_在SparkDataFrame中找到每个组的最大行数

使用join(如果有关系,将导致一组以上的排):import pyspark.sql.functions as F

from pyspark.sql.functions import count, col

cnts = df.groupBy("id_sa", "id_sb").agg(count("*").alias("cnt")).alias("cnts")

maxs = cnts.groupBy("id_sa").agg(F.max("cnt").alias("mx")).alias("maxs")

cnts.join(maxs,

(col("cnt") == col("mx")) & (col("cnts.id_sa") == col("maxs.id_sa"))

).select(col("cnts.id_sa"), col("cnts.id_sb"))

使用窗口函数(将删除领带):from pyspark.sql.functions import row_number

from pyspark.sql.window import Window

w = Window().partitionBy("id_sa").orderBy(col("cnt").desc())

(cnts

.withColumn("rn", row_number().over(w))

.where(col("rn") == 1)

.select("id_sa", "id_sb"))

使用struct订购:from pyspark.sql.functions import struct

(cnts

.groupBy("id_sa")

.agg(F.max(struct(col("cnt"), col("id_sb"))).alias("max"))

.select(col("id_sa"), col("max.id_sb")))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值