简单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个核心。我做错什么了吗?