Как создать VertexRDD из входных файлов вершин? - PullRequest
1 голос
/ 05 ноября 2019

У меня есть файл ввода вершин, подобный этому:

(1L,(0.5,0.5))
(2L,(0.25,0.0625))
(3L,(0.125,0.125))
(4L,(0.0625,0.0625))
(5L,(0.0625,0.25))

, который я собираюсь преобразовать в RDD[(Long, Array[Double])].

Я знаю, что этот метод работает:

val Vertices=sc.makeRDD(Array((1L,Array(0.5,0.5)),(2L,Array(0.25,0.0625)),(3L,Array(0.125,0.125)),(4L,Array(0.0625,0.0625)),(5L,Array(0.0625,0.25))))

но проблема в том, что я собираюсь получить эти данные из текстового файла.

Я уже пробовал использовать:

val vertices: RDD[(VertexId, Array[Double])] = sc.textFile("ads/tes").map { line =>
  val row = line.split("[\\r\\n]+")
  (row(0).toLong, Array(row(1).toDouble,row(2).toDouble))
}

, но я получаю ошибку java.lang.NumberFormatExceptionчто меня смущает. Может кто-нибудь помочь мне? Спасибо за любые усилия, спасибо!

1 Ответ

0 голосов
/ 06 ноября 2019

То, что вы хотите сделать, это разделить каждую строку на три числа. Используя map, вы будете обрабатывать каждую строку в СДР отдельно, однако в текущем коде вы пытаетесь разделить на "[\\r\\n]+" (новые строки), что неверно.

Вместо этого сначала удалите все ненужные символы, затемразделить на ,. Код будет:

val vertices: RDD[(VertexId, Array[Double])] = sc.textFile("ads/tes").map { line =>
  val row = line.replaceAll(["\\(\\)L"], "").split(",")
  (row(0).toLong, Array(row(1).toDouble, row(2).toDouble))
}
...