简单Dask频率计数

简单Dask频率计数,dask,Dask,我想做一个频率计数。想象一下下面列出的人和他们的年龄: IN [110]: b = db.from_sequence([('alex', 31), ('cassee', 31), ('Wes', 25), ('Allison', 35)]) In [111]: b.map(lambda x: (x[1], 1))\ .foldby(lambda x: x[0], lambda total,x: total[1]+x[1]).compute()

我想做一个频率计数。想象一下下面列出的人和他们的年龄:

    IN [110]: b = db.from_sequence([('alex', 31), ('cassee', 31), ('Wes', 25), ('Allison', 35)])

    In [111]: b.map(lambda x: (x[1], 1))\
             .foldby(lambda x: x[0], lambda total,x: total[1]+x[1]).compute()
    Out[111]: [(31, 2), (25, (25, 1)), (35, (35, 1))]

第一个元组看起来不错
(31,2)
意味着有两个31岁的元组出现。然而,接下来两个元组的格式很奇怪。我希望输出是频率计数:
[(31,2)、(25,1)、(35,1)]

您希望的调用如下所示:

b.pluck(1).frequencies().compute()
pluck
从每个元素中选择“年龄”<代码>频率按名称所示执行:)

您也可以用其他方式来实现这一点:

b.foldby(1, lambda x, y: x + 1, 0).compute()
也就是说,使用元素1进行分组,并且在每个组中,从0开始,为每个元素到目前为止的值添加1

from operator import add
from collections import Counter
b.fold(lambda x, y: x + Counter([y[1]]), add, initial=Counter()).compute()

这是一个相当复杂的解释…

我没有提到,但我确实尝试了
频率
,但在拔毛操作后,
181283878
元素的速度似乎非常慢(以小时为单位)。当你运行
频率
折叠时,我注意到
分区
变为1,并且在大多数情况下,我的电脑只使用了1个核心。我做错什么了吗?