【问题标题】:Can Spark map function assign dynamic variable?Spark map 函数可以分配动态变量吗?
【发布时间】:2015-10-15 21:53:50
【问题描述】:
我知道地图功能可以这样做
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
【问题讨论】:
标签:
apache-spark
map-function
【解决方案1】:
如果我对您的问题的理解正确,那么从 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)