Spark map功能可以分配动态变量吗?

时间:2015-10-15 07:48:56

标签: apache-spark map-function

我知道地图功能可以像

一样
val a=5
map(data=>data+5)

可能的变量a是动态的吗?

例如,变量a的值介于1到5之间,因此a = 1,2,3,4,5。 当我调用map函数时,它可以像

那样分布执行
data + 1
data + 2
data + 3
data + 4
data + 5

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,从Spark的角度来看,这没有任何意义。您在非分布式顺序处理环境中(其中每个数据可以确定性地应用于不同的功能)是有意义的。但是,Spark在分布式数据集中应用转换,并且这些转换所应用的函数是相同的。

实现您要做的事情的一种方法是在转换数据时使用输入的某些固有特性。这样,即使你的转换函数是相同的,提供给它的参数也会使它的行为类似于(你所描述的)动态变量"。在您的示例中,zipWithIndex()函数就足够了。虽然重要的是要注意,如果不能保证排序,那么每次转换运行时索引都会发生变化。

scala> val rdd = sc.parallelize(Array(1,1,1,1,1,1))
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:12

scala> val newRDD = rdd.zipWithIndex().map { case (elem, idx) => elem + idx }
...
scala> newRDD.take(6)
...
res0: Array[Long] = Array(1, 2, 3, 4, 5, 6)