Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 将RDD的每个元素与列表中相应的元素相乘_Python_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Python 将RDD的每个元素与列表中相应的元素相乘

Python 将RDD的每个元素与列表中相应的元素相乘,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,例如: x = RandomRDDs.normalRDD(sc, size=3, seed=0) x是这样的:[-1.3,-2.4,-4.5] 我想用列表[1,2,3]中不同的数字乘以x的每个元素,然后将它们相加,得到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

例如:

x = RandomRDDs.normalRDD(sc, size=3, seed=0)
x是这样的:[-1.3,-2.4,-4.5] 我想用列表[1,2,3]中不同的数字乘以x的每个元素,然后将它们相加,得到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)


非常感谢

我会使用
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()
或者


好的,很抱歉接受得太晚了,我做了一个小修改,让它在我的机器上运行:@Yvonne可以自由建议对答案进行编辑,或者写一条评论,这样我可以根据需要进行更新。环境:python版本3.6,spark 2.3.0,
x.zipWithIndex().map(lambda对:对[0]*w.value[pair[1]])。reduce(lambda,b:a+b)
。你真有效率!
操作符.add
工作得很好,但是您使用的是Python2.X吗?在Python3.X中,
lambda(k,i)
不受支持,并且
X.zipWithIndex()
的元素是一个类似于(-1.3,0)的元组,我无法再对其进行解压缩,因此我必须使用像我在最后一条注释中所做的那样的索引:
X.zipWithIndex().map(lambda t:t[0]*w.value[t[1]]).reduce(operator.add)
@Yvonne你说得对,我在用python2和pyspark。将更新。谢谢
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)