Python 如何使用重复键在Pyspark中使用countByValue?

Python 如何使用重复键在Pyspark中使用countByValue?,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,我试图获得RDD的所有唯一值及其各自的发生计数。我尝试将元素列表转换为RDD,并尝试获取每个值的出现次数 X_RDD = sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1]) Y_MAP = X_RDD.map(lambda m:(m,1)) for i in Y_MAP.countByValue():print(i) 我得到了以下输出: 8,1 7,1 6,1 5,1 4,1 3,1 2,1 1,1 如何获得以下事件: 1,6 2,3 3,1

我试图获得RDD的所有唯一值及其各自的发生计数。我尝试将元素列表转换为RDD,并尝试获取每个值的出现次数

X_RDD = sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1])
Y_MAP = X_RDD.map(lambda m:(m,1))
for i in Y_MAP.countByValue():print(i)
我得到了以下输出:

8,1
7,1
6,1
5,1
4,1
3,1
2,1
1,1
如何获得以下事件:

1,6
2,3
3,1
4,2
5,1
6,1
7,1
8,1
countByValue():它将此RDD中每个唯一值的计数作为(值,计数)对的字典返回,要访问此字典,您需要
.items()
。这是你丢失的部分

方法1:镜像您的方法

sorted(sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1]).countByValue().items())
    [(1, 6), (2, 3), (3, 1), (4, 2), (5, 1), (6, 1), (7, 1), (8, 1)]
方法2:更基本

X_RDD = sc.parallelize([1,2,3,4,5,6,7,8,2,4,2,1,1,1,1,1])
Y_MAP = X_RDD.map(lambda m:(m,1))

x = Y_MAP.groupByKey().mapValues(lambda x:list(x))
x.mapValues(lambda x:len(x)).collect()
    [(1, 6), (2, 3), (3, 1), (4, 2), (5, 1), (6, 1), (7, 1), (8, 1)]

明白了,谢谢