找到每个变量的最常见值(模式)

时间:2015-04-06 16:03:45

标签: python statistics apache-spark

我得到了与此类似的RDD

color  category
green  a
green  b
red    a
orange a
green  b
red    d
green  c
red    d
green  e

我试图为每种颜色找到最常见的类别。 像这样:

[green, b]  : 2
[red, d ]   : 2
[orange, a] : 1

在使用

之后我已经在中途了
rdd.countByValue()

在这种情况下会返回如下字典:

(color=u'green', category=u'a'): 1
(color=u'green', category=u'b'): 2
(color=u'green', category=u'c'): 1
(color=u'green', category=u'e'): 1
(color=u'red', category=u'a'): 1
(color=u'red', category=u'd'): 2
(color=u'orange', category=u'a'): 1

从这一步开始,我不知道如何获得每种颜色最常见的类别。 提前谢谢。

编辑:我正在尝试使用contentDF.groupBy('color').agg({'category' : 'max'}).collect()的不同方法,但我认为agg参数错误,因为它给了我整个表格的总体最大值。有什么建议?我觉得我越来越近了!

编辑:我还在寻找解决方案...... 现在我有一张这样的表:

 color category frequency
 green   a         1
 green   b         2
 green   c         1
 green   e         1
 red     a         1
 red     d         2
 orange  a         1

有人建议使用Spark SQL查询来选择每个颜色组的最大值吗?

2 个答案:

答案 0 :(得分:1)

您可以使用collections.defaultdict

import collections
with open("your_file") as f:
    my_dict = collections.defaultdict(int)
    next(f)
    for x in f:
        my_dict[x.strip()] +=1
    print my_dict

答案 1 :(得分:0)

看起来像你想要的是:

from collections import Counter
from operator import itemgetter

result = {color: max(Counter(map(itemgetter('category'), grp))) for
                  color,grp in content.DF.groupBy('color')}

但我从未使用过Spark的RDD对象,因此我试图从文档中进行推断。