如何从顶点输入文件创建VertexRDD?

问题描述 投票:0回答:1

我有一个这样的顶点输入文件:

(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错误,这使我感到困惑。谁能帮我?感谢您的努力!

scala apache-spark spark-graphx
1个回答
0
投票

您要做的是将每一行分成三个数字。使用map,您将分别处理RDD中的每一行,但是,在您当前的代码中,您尝试分割"[\\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))
}
© www.soinside.com 2019 - 2024. All rights reserved.