我得到了与此类似的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查询来选择每个颜色组的最大值吗?
答案 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对象,因此我试图从文档中进行推断。