Scala 我应该使用对象类还是广播变量
我有一个坐标RDD[(Int,Int)],我想创建一个新的RDD[(Int,(Int,Int))]最佳实践是什么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
object GlobalVariables{
private var pointId : Int = 0
def newPointId(): Long ={
pointId += 1
pointId
}
}
points = coordinates.map(x=> (GlobalVariables.newPointID,x._1, x._2))
您可以在不需要可变计数器的情况下尝试另一种解决方案,转换
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))