Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Pyspark:对rdd的值应用reduce by key_Apache Spark_Pyspark_Rdd_Reduce - Fatal编程技术网

Apache spark Pyspark:对rdd的值应用reduce by key

Apache spark Pyspark:对rdd的值应用reduce by key,apache-spark,pyspark,rdd,reduce,Apache Spark,Pyspark,Rdd,Reduce,经过一些转换后,我得到了一个rdd,格式如下: [(0,[('a',1),('b',1),('b',1),('b',1)]) (1,[('c',1),('d',1),('h',1),('h',1)])] 我不知道如何本质上“reduceByKey()”这个rdd的值部分 这就是我想要实现的目标: [(0,[('a',1),('b',3)]) (1,[('c',1),('d',1),('h',2)]) 我最初使用的是.values(),然后将reduceByKey应用于结果,但最终我丢失了原始

经过一些转换后,我得到了一个rdd,格式如下:

[(0,[('a',1),('b',1),('b',1),('b',1)])
(1,[('c',1),('d',1),('h',1),('h',1)])]
我不知道如何本质上“reduceByKey()”这个rdd的值部分

这就是我想要实现的目标:

[(0,[('a',1),('b',3)])
(1,[('c',1),('d',1),('h',2)])

我最初使用的是.values(),然后将reduceByKey应用于结果,但最终我丢失了原始密钥(在本例中为0或1)。

您丢失了原始密钥,因为
.values()
将只获取一行
键值的值。您应该对行中的元组求和

从集合导入defaultdict
def sum_行(行):
结果=defaultdict(int)
对于键,第[1]行中的val:
结果[键]+=val
返回(行[0],列表(result.items())
data_rdd=data_rdd.map(总和行)
打印(数据收集())
#[(0,[('a',1),('b',3)],(1,[('h',2),('c',1),('d',1)]]

虽然
给出了RDD,
reduceByKey
对RDD上的所有值都有效,而不是按行

您还可以使用
groupby
(需要订购)来实现相同的功能:

from itertools import groupby

distdata.map(lambda x: (x[0], [(a, sum(c[1]  for c in b)) for a,b in groupby(sorted(x[1]), key=lambda p: p[0]) ])).collect()