2017-08-04 32 views
0

通過Scala spark-shell,我可以使用elasticsearch-hadoop-5.5.0連接器訪問Elasticsearch數據庫。如何通過Scala spark-shell將大型RDD寫入本地磁盤?

我在火花殼通過以下命令生成我RDD:

val myRdd = sc.esRDD("myIndex/type", myESQuery) 

myRDD包含210萬條記錄在15個分區。我一直在試圖將所有數據寫入本地磁盤上的文本文件,但是當我嘗試運行將RDD轉換爲數組的操作時,例如myRdd.collect(),我重載了我的java堆。

是否有一種方法可以逐步導出數據(例如,每次處理100k條記錄),以便我永遠不會超載系統內存?

回答

0

當您使用saveAsTextFile時,您可以傳遞文件路徑爲"file:///path/to/output"以使其在本地保存。

另一種選擇是使用rdd.toLocalIterator這將允許您遍歷驅動程序上的rdd。然後,您可以將每行寫入一個文件。此方法避免一次拉取所有記錄。

+0

在這種情況下,我將如何使用toLocalIterator? –

+0

@ M.T。 'rdd.toLocalIterator.foreach(line =>用行來做)'' – puhlen

相關問題