Python 查找每个变量的最频繁值(模式)

Python 查找每个变量的最频繁值(模式),python,statistics,apache-spark,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 (color=u'green', category=u'a'): 1 (color=u'green', category=u'b'):

我得到了类似的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
(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
 color category frequency
 green   a         1
 green   b         2
 green   c         1
 green   e         1
 red     a         1
 red     d         2
 orange  a         1
我已经用了一半了

rdd.countByValue()
在这种情况下,它将返回如下字典:

[green, b]  : 2
[red, d ]   : 2
[orange, a] : 1
(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
 color category frequency
 green   a         1
 green   b         2
 green   c         1
 green   e         1
 red     a         1
 red     d         2
 orange  a         1
从这一步开始,我不知道如何获得每种颜色中最常见的类别。 提前谢谢

编辑:我正在使用
contentDF.groupBy('color').agg({'category':'max'}).collect()
尝试另一种方法,但我认为
agg
参数是错误的,因为它为我提供了整个表的最大值。有什么建议吗?我感觉我快接近了

编辑:我仍然在寻找解决方案。。。 现在我有一张这样的桌子:

[green, b]  : 2
[red, d ]   : 2
[orange, a] : 1
(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
 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查询来选择每个颜色组的最大值吗?

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

看起来你想要的是:

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

它对RDD对象有效吗?我试过了,但没有成功。现在,我正在使用这种方法:
contentDF.groupBy('color').agg({'category':'max'}).collect()
,我得到了类似于我想要的东西。我认为agg参数是错误的
contentDF
是表格