【问题标题】:How to create VertexRDD from vertex input files?如何从顶点输入文件创建 VertexRDD?
【发布时间】:2020-03-02 06:12:54
【问题描述】:

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

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

【问题讨论】:

  • 您能否分享您用作输入的文件的示例数据?
  • 它在问题的顶部 (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))
  • 是的,我看到了。但取决于它在您的数据源上的方式将取决于拆分是否正确。我认为可能存在问题。
  • 对不起,我不明白你的意思是“它在你的数据源上的情况”是什么意思,即整个数据,数据就是这样。它存储在本地
  • 纯文本中用于分隔值的字符是什么? (逗号、制表符等)基于此,您的拆分也应该使用它。另一件事是,当您使用.textFile 时,您将获取文件中的每一行,因此在您的.split 中您不需要\\n。基本上,NumberFormatException 可能会被引发,因为来自.split 的字符串数组可能不正确。

标签: scala apache-spark rdd spark-graphx


【解决方案1】:

您要做的是将每一行分成三个数字。使用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))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多