2017-08-04 73 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

相关问题