我有一个坐标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上执行的,如何确定我不会出现任何并发错误?
答案 0 :(得分:0)
您可以尝试另一种解决方案,而无需使用可变计数器。转换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))