2014-10-20 54 views
1
val test= sc.textFile(12,logFile).cache() 

在上面的代碼片段中,我試圖讓apache spark來並行讀取一個巨大的文本文件。 我如何將其內容存儲到字符串?apache spark文本文件到字符串

我早些時候這樣做是爲了閱讀

val lines = scala.io.Source.fromFile(logFile, "utf-8").getLines.mkString 

但當時我正努力讓讀取速度更快使用火花上下文。

+0

該日誌文件位於何處? (哪個文件系統?) – maasg 2014-10-20 11:25:40

+0

該測試正在Ubuntu上運行。 – Siva 2014-10-21 05:08:19

回答

2

文件讀入通過星火一個字符串是不太可能比直接讀取速度更快 - 在星火高效地工作,你應該把一切都在RDD形成並以這種方式進行處理,最終只能減小到(小)值。在Spark中讀取它意味着您將在本地讀取它到內存中,序列化這些塊並將它們發送到羣集節點,然後再次序列化它們以將它們發送回本地計算機並將它們聚集在一起。 Spark是一個強大的工具,但它並不神奇;它只能並行處理實際上並行的操作。 (你甚至不知道文件讀入內存是瓶頸?總是基準優化前)

但是,爲了回答你的問題,你可以使用

lines.toLocalIterator.mkString 

只是不要指望它是任何更快比在本地讀取文件。

0

收集值,然後遍歷它們:

var string = "" 
    test.collect.foreach({i => string += i})