Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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
减少对-python_Python_Mapreduce_Apache Spark_Pyspark - Fatal编程技术网

减少对-python

减少对-python,python,mapreduce,apache-spark,pyspark,Python,Mapreduce,Apache Spark,Pyspark,如果必须对一对值进行缩减,那么如何为同一对值编写lambda表达式 testr = [('r1', (1, 1)), ('r1', (1, 5)),('r2', (1, 1)),('r3', (1, 1))] 期望输出为 ('r1', (2, 6)),('r2', (1, 1)),('r3', (1, 1)) 按键减少它: .reduceByKey(lambda a, b: (a[0]+b[0], a[1]+b[1])) 您可以使用zip使任意长度的元组更通用: .reduceByKey

如果必须对一对值进行缩减,那么如何为同一对值编写lambda表达式

testr =  [('r1', (1, 1)), ('r1', (1, 5)),('r2', (1, 1)),('r3', (1, 1))]
期望输出为

('r1', (2, 6)),('r2', (1, 1)),('r3', (1, 1))
按键减少它:

.reduceByKey(lambda a, b: (a[0]+b[0], a[1]+b[1]))
您可以使用zip使任意长度的元组更通用:

.reduceByKey(lambda a, b: tuple(x+y for x,y in zip(a,b)))

您可以使用combineByKey方法

testr =  sc.parallelize((('r1', (1, 1)), ('r1', (1, 5)),('r2', (1, 1)),('r3', (1, 1))))

testr.combineByKey(lambda x:x,lambda x,y:(x[0]+y[0],x[1]+y[1]),lambda x,y:(x[0]+x[1],y[0]+y[1])).collect()

我试试这个。我使用字符串作为键,并且值对始终包含整数值。如果数据显示值对中存在混合,则可以消除
int()
调用(如果它们都是int)。
testr =  sc.parallelize((('r1', (1, 1)), ('r1', (1, 5)),('r2', (1, 1)),('r3', (1, 1))))

testr.combineByKey(lambda x:x,lambda x,y:(x[0]+y[0],x[1]+y[1]),lambda x,y:(x[0]+x[1],y[0]+y[1])).collect()