2015-04-06 45 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對象,所以我想從文檔推斷。