Должен ли я использовать объектный класс или широковещательную переменную - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть координаты 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))
  1. Этот код выполняется на рабочих или я должен использовать комбинацию широковещательных переменных и аккумуляторов?

  2. Если код выполняется на рабочих, как я могу быть уверен, что будунет ошибки параллелизма?

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете попробовать другое решение без необходимости использования изменяемого счетчика. Преобразование 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...