scala中的快速文件写入?

scala中的快速文件写入?,scala,apache-spark,file-writing,spark-graphx,Scala,Apache Spark,File Writing,Spark Graphx,所以我有一个scala程序,它遍历一个图形,并将数据逐行写入一个文本文件。它本质上是一个用于graphx的边缘列表文件 最慢的速度实际上是创建这个文本文件,我们谈论的可能是它写入这个文本文件的一百万条记录。有没有一种方法可以让我以某种方式并行完成这项任务,或者通过某种方式将其存储在内存中或其他任何东西来加快速度 更多信息: 我正在使用hadoop集群来迭代图形,下面是我创建文本文件的代码片段,我现在正在编写HDFS: val fileName = dbPropertiesFile + "-edg

所以我有一个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()

将文件写入HDFS从来都不快。你的标签似乎表明你已经在使用spark了,所以你也可以利用它

    sparkContext
      .makeRDD(20, edges.toStream)  
      .map(e => e.inVertex.id -> e.outVertex.id)
      .toDF
      .write
      .delimiter(" ")
      .csv(path)

这将您的输入拆分为20个分区(您可以使用上面的数值参数
makeRDD
来控制该数字),并将它们并行写入hdfs中的20个不同块,这些块表示生成的文件

看看Scala中使用Akka进行的并行文件处理,您想将其写入本地文件系统吗?或者你是在一个有HDFS等的集群上?我投票结束这个问题,因为它太宽了,无法回答!我使用的是hadoop集群,但我愿意将文件写入本地文件系统,如果这证明是快速的,您可能可以缩小您的问题范围。你能测量出什么是真正的慢吗?您是否使用压缩格式(例如GZIP?切换到Snappy怎么样?)写入hadoop是否会占用您的带宽(如果切换到本地文本文件的BufferedOutputStream会怎么样?如果动态压缩会怎么样)?如果您手动尝试写入多个hadoop文件呢。。。没有更多细节,我们有点茫然。