Python 查找每个变量的最频繁值(模式)
我得到了类似的RDDPython 查找每个变量的最频繁值(模式),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'):
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
是表格