Умножить каждый элемент СДР на соответствующий элемент в списке - PullRequest
0 голосов
/ 05 января 2019

например:

x = RandomRDDs.normalRDD(sc, size=3, seed=0)

х выглядит так: [-1,3, -2,4, -4,5] Я хочу умножить каждый элемент x на другое число в списке [1, 2, 3] и добавить их для получения 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

как я могу заменить 2 в x.map (лямбда i: i * 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))])

спасибо большое!

1 Ответ

0 голосов
/ 05 января 2019

Я бы сделал это, используя 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)
...