所以我有一个scala程序,它遍历图形并逐行将数据写入文本文件。它本质上是一个与graphx一起使用的边缘列表文件。
最大的减速实际上是创建这个文本文件,正在谈论它写入这个文本文件的百万条记录。有没有办法可以以某种方式将这个任务并行或通过某种方式以某种方式将其存储在内存或任何东西中来加快速度?
更多信息: 我正在使用hadoop集群来遍历图形,这是我的文本文件创建的代码片段,我现在正在写入HDFS:
val fileName = dbPropertiesFile + "-edgelist-" + System.currentTimeMillis()
val path = new Path("/home/user/graph/" + fileName + ".txt")
val conf = new Configuration()
conf.set("fs.defaultFS", "hdfs://host001:8020")
val fs = FileSystem.newInstance(conf)
val os = fs.create(path)
while (edges.hasNext) {
val current = edges.next()
os.write(current.inVertex().id().toString.getBytes())
os.write(" ".getBytes())
os.write(current.outVertex().id().toString.getBytes())
os.write("\n".toString.getBytes())
}
fs.close()
答案 0 :(得分:1)
将文件写入HDFS永远不会很快。你的标签似乎暗示你已经在使用spark了,所以你也可以利用它。
sparkContext
.makeRDD(20, edges.toStream)
.map(e => e.inVertex.id -> e.outVertex.id)
.toDF
.write
.delimiter(" ")
.csv(path)
这会将您的输入拆分为20个分区(您可以使用上面的makeRDD
数字参数控制该数字),并将它们并行写入hdfs中的20个不同的块,这些块代表您生成的文件。