PySpark - 对(元组,整数)值进行 reducyByKey

PySpark - reducyByKey on a (tuple,int) value

我有 RDD:

我想将其缩减为元组中的每个键及其每个点的平均值。 例如,如果我有(小例子):

[(1,((0,19,15,39),1)),(1,((0,64,19,3),1))]

我会得到:

[(1,(0,83,34,41),2))]

然后(或直接)

[(1,(0,41.5,17,21)]

我试过了:

reduceByKey(lambda a,b: a+b)
reduceByKey(lambda a,b: (a[0]+b[0],a[1]+b[1]))

和其他没有帮助或给出 RDD 错误的东西。

我该如何解决这个问题?

您需要做一些进一步的计算以获得每个键的平均值:

result = rdd.reduceByKey(lambda a, b: (tuple(i+j for (i,j) in zip(a[0],b[0])), a[1]+b[1])) \
            .map(lambda r: (r[0], tuple(i/r[1][1] for i in r[1][0])))