Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
Scala 我应该使用对象类还是广播变量_Scala_Apache Spark - Fatal编程技术网

Scala 我应该使用对象类还是广播变量

Scala 我应该使用对象类还是广播变量,scala,apache-spark,Scala,Apache Spark,我有一个坐标RDD[(Int,Int)],我想创建一个新的RDD[(Int,(Int,Int))]最佳实践是什么 object GlobalVariables{ private var pointId : Int = 0 def newPointId(): Long ={ pointId += 1 pointId } } points = coordinates.map(x=> (GlobalVariables.newPointID,x._1, x._2

我有一个坐标RDD[(Int,Int)],我想创建一个新的RDD[(Int,(Int,Int))]最佳实践是什么

object GlobalVariables{

  private var pointId : Int = 0

  def newPointId(): Long ={
    pointId += 1
    pointId
  }

}

points = coordinates.map(x=> (GlobalVariables.newPointID,x._1, x._2))
  • 这段代码是在worker上执行的,还是应该使用广播变量和累加器的组合

  • 如果代码是在workers上执行的,我如何确保不会出现任何并发错误


  • 您可以在不需要可变计数器的情况下尝试另一种解决方案,转换
    zipWithIndex
    提供了一个稳定的索引,按其原始顺序对每个元素进行编号。 例如:

    val myRdd = RDD(1,2,3)
    val zippedWithIndex = myRdd.zipWithIndex //  ((1,0),(2,1),(3,2))
    
    在第一次转换之后,可以翻转索引和值

    val result = zippedWithIndex.map{case (index,value) => (value,index)}  // ((0,1),(1,2),(2,3))