首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Pyspark中高效地从多个列中独立查找top-N值

在Pyspark中高效地从多个列中独立查找top-N值
EN

Stack Overflow用户
提问于 2019-08-12 05:59:35
回答 1查看 253关注 0票数 1

我正在尝试获取数据帧中所有列的前n个频率计数

代码语言:javascript
复制
counts = (df.rdd
    .flatMap(lambda x: x.asDict().items())
    .map(lambda x: (x, 1))
    .reduceByKey(add))

我得到这个:((列名/值),计数)

代码语言:javascript
复制
(('name', 'Dominion Range 08357'), 1)
(('id', 52132), 1)
(('nametype', 'Valid'), 10)
(('recclass', 'L6'), 2)
(('mass (g)', 8.9), 1)
(('fall', 'Found'), 10)
(('year', '01/01/2008 12:00:00 AM'), 2)
(('reclat', 0.0), 1)
(('reclong', 0.0), 1)
(('GeoLocation', '(0.000000, 0.000000)'), 1)
(('name', 'Yamato 792863'), 1)
(('id', 28212), 1)
(('recclass', 'H5'), 3)
(('mass (g)', 132.25), 1)
(('year', '01/01/1979 12:00:00 AM'), 1)
(('reclat', -71.5), 1)
(('reclong', 35.66667), 1)
(('GeoLocation', '(-71.500000, 35.666670)'), 1)

在此之后,我将尝试获取前10个值:

代码语言:javascript
复制
(counts
    .groupBy(lambda x: x[0])
    .flatMap(lambda g: nlargest(10, g[1], key=lambda x: x[1])))

但我得到了同样的结果。有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2019-08-13 11:07:54

我就是想明白了。我在groupBy中缺少额外的索引

代码语言:javascript
复制
counts = (df.rdd
    .flatMap(lambda x: x.asDict().items())
    .map(lambda x: (x, 1))
    .reduceByKey(add)
    .groupBy(lambda x: x[0][0])
    .flatMap(lambda g: nlargest(3, g[1], key=lambda x: x[1])))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57453921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档