我有一个与此类似的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查询来选择每个颜色组的最大值?

最佳答案

您可以使用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

关于python - 查找每个变量的最频繁值(模式),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29474850/

10-12 17:04