PySpark中如何对作为序列的特征段执行GROUPBY操作?
PySpark中可以直接使用Python的**序列解包运算符***替代Scala里的:_*语法,二者作用完全一致,都是将列表/序列展开为方法接收的可变长度参数。
等价实现代码
你可以直接按如下写法实现和Scala版本完全一致的分组统计逻辑:
from pyspark.sql.functions import sum, lit, count # 假设x为单个分组列(字符串或Column对象),z为特征段列的列表 x_and_z_schema = [x] + z # 用*解包列表即可传入groupBy likelihood_df = df.groupBy(*x_and_z_schema) \ .agg(sum(lit(1)).alias("segment_count"))
也可以直接简化写法,无需先拼接完整列列表:
likelihood_df = df.groupBy(x, *z) \ .agg(sum(lit(1)).alias("segment_count"))
如果只是需要统计分组后的条目数,也可以直接用count函数,效果完全相同:
likelihood_df = df.groupBy(x, *z) \ .agg(count("*").alias("segment_count"))
补充说明
*解包语法适用于所有PySpark中接收多列参数的方法,包括select、orderBy、agg等,使用规则和此处完全一致。
内容的提问来源于stack exchange,提问作者user3441553
相关产品推荐
相关产品推荐

