例如:
x = RandomRDDs.normalRDD(sc, size=3, seed=0)
x像这样:[-1.3,-2.4,-4.5] 我想将x的每个元素与列表[1、2、3]中的不同数字相乘,并将它们相加以产生y。 此处y等于-1.3 * 1 + -2.4 * 2 + -4.5 * 3
但是我只能这样做:
y = x.map(lambda i: i*2).reduce(lambda a, b: a+b)
这里y = -1.3 * 2 + -2.4 * 2 + -4.5 * 2
如何每次用不同的数字替换 x.map(lambda i:i * 2)中的2?
最终效果类似于我们在python中经常做的事情:
x = [-1.3, -2.4, -4.5]
w = [1, 2, 3]
y = sum(x*w)
或
sum([x[i]*w[i] for i in range(len(x))])
非常感谢!
答案 0 :(得分:1)
我可以使用zipWithIndex
和map
来做到这一点:
x = RandomRDDs.normalRDD(sc, size=3, seed=0)
w = sc.broadcast([1, 2, 3])
x.zipWithIndex().map(lambda v: v[0] * w.value[v[1]]).sum()
或者,
import operator
x.zipWithIndex().map(lambda v: v[0] * w.value[v[1]]).reduce(operator.add)