![](/img/trans.png)
[英]SPARK: sum of elements with this same indexes from RDD[Array[Int]] in spark-rdd
[英]Spark: Mapping elements of an RDD using other elements from the same RDD
假设我有一个rdd:
val r = sc.parallelize(Array(1,4,2,3))
我要做的是创建映射。 例如:
r.map(val => val + func(all other elements in r)).
这有可能吗?
您很有可能会遇到例外,例如波纹管。
rdd = sc.parallelize(range(100))
rdd = rdd.map(lambda x: x + sum(rdd.collect()))
即您正在尝试广播RDD
。
例外:您似乎正在尝试广播RDD或从操作或转换引用RDD。 RDD转换和操作只能由驱动程序调用,而不能在其他转换内部调用。 例如,rdd1.map(lambda x:rdd2.values.count()* x)无效,因为无法在rdd1.map转换内部执行值转换和计数操作。 有关更多信息,请参见SPARK-5063。
为此,您必须执行以下操作:
res = sc.broadcast(rdd.reduce(lambda a,b: a + b))
rdd = rdd.map(lambda x: x + res.value)
Spark已经支持Gradient Descent 。 也许您可以看看他们是如何实现的。
我不知道是否有更有效的替代方法,但我首先要创建一些结构,例如:
rdd = sc.parallelize([ (1, [4,2,3]), (4, [1,2,3]), (2, [1,4,3]), (3, [1,4,2]));
rdd = rdd.map(lambda (x,y) => x + func(y));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.