栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

(py)Spark中分组数据的模式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(py)Spark中分组数据的模式

由zero323建议的解决方案。

原始解决方案:https :
//stackoverflow.com/a/35226857/1560062

首先,计算每个(x,y)组合的出现次数。

counts = df.groupBy(['x', 'y']).count().alias('counts')counts.show()## +---+---+-----+## |  x|  y|count|## +---+---+-----+## |  0|  1|    2|## |  0|  3|    2|## |  0|  4|    2|## |  1|  1|    3|## |  1|  3|    1|## +---+---+-----+

解决方案1:按“ x”分组,通过取每组中计数的最大值进行汇总。最后,删除“计数”列。

result = (counts          .groupBy('x')          .agg(F.max(F.struct(F.col('count'),        F.col('y'))).alias('max'))          .select(F.col('x'), F.col('max.y'))         )result.show()## +---+---+## |  x|  y|## +---+---+## |  0|  4|## |  1|  1|## +---+---+

解决方案2:使用窗口,按“ x”进行分区,并按“ count”列进行排序。现在,在每个分区中选择第一行。

win = Window().partitionBy('x').orderBy(F.col('count').desc())result = (counts          .withColumn('row_num', F.rowNumber().over(win))          .where(F.col('row_num') == 1)          .select('x', 'y')         )result.show()## +---+---+## |  x|  y|## +---+---+## |  0|  1|## |  1|  1|## +---+---+

由于行的排序方式,两个结果有不同的结果。如果没有联系,则两种方法得出的结果相同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号