2015-04-06 48 views
2

最频繁的值(模式),我得到了一个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 

任何人都可以提出一个星火SQL查询来选择每个颜色组的最大价值?

回答

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 
+0

它是否适用于RDD对象?我尝试过,并没有工作。现在,我正在使用这种方法: 我正在得到类似于我想要的内容。我认为agg参数是错误的。 'contentDF'是表 – user3276768

+0

我编辑它你现在可以尝试 – Hackaholic

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对象,所以我想从文档推断。