通过scala spark shell,我可以使用elasticsearch-hadoop-5.5.0连接器访问elasticsearch数据库。
我通过在spark shell中传递以下命令来生成rdd:
val myRdd = sc.esRDD("myIndex/type", myESQuery)
myrdd包含跨15个分区的210万条记录。我一直在尝试将所有数据写入本地磁盘上的文本文件,但当我尝试运行将rdd转换为数组的操作(如myrdd.collect())时,我会使java堆过载。
有没有一种方法可以增量地导出数据(例如,一次导出10万条记录),这样就不会使系统内存过载?
1条答案
按热度按时间vc9ivgsu1#
当你使用
saveAsTextFile
您可以将文件路径作为"file:///path/to/output"
在本地保存。另一种选择是使用
rdd.toLocalIterator
这将允许您在驱动程序上迭代rdd。然后可以将每一行写入一个文件。这种方法避免了一次拉入所有记录。