val test= sc.textFile(12,logFile).cache()
在上面的代码片段中,我试图让apache spark并行化读取一个巨大的文本文件。 如何将其内容存储到字符串中?
我之前这样做是为了阅读
val lines = scala.io.Source.fromFile(logFile, "utf-8").getLines.mkString
但现在我正在尝试使用spark context更快地进行读取。
答案 0 :(得分:2)
通过Spark将文件读入String非常不可能比直接读取更快 - 为了在Spark中高效工作,你应该保持RDD格式的所有内容并以这种方式进行处理,只减少到(小)值在末尾。在Spark中读取它意味着您将在本地将其读入内存,序列化块并将它们发送到您的群集节点,然后再次序列化它们以将它们发送回本地计算机并将它们收集在一起。 Spark是一个强大的工具,但它并不神奇;它只能并行化实际并行的操作。 (你甚至知道将文件读入内存是瓶颈吗?在优化之前始终进行基准测试)
但要回答你的问题,你可以使用
lines.toLocalIterator.mkString
不要指望它比在本地读取文件更快。
答案 1 :(得分:0)
收集值,然后迭代它们:
var string = ""
test.collect.foreach({i => string += i} )