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])))
我有 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])))