如何通过scala spark shell将大型rdd写入本地磁盘?

relj7zay  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(592)

通过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万条记录),这样就不会使系统内存过载?

vc9ivgsu

vc9ivgsu1#

当你使用 saveAsTextFile 您可以将文件路径作为 "file:///path/to/output" 在本地保存。
另一种选择是使用 rdd.toLocalIterator 这将允许您在驱动程序上迭代rdd。然后可以将每一行写入一个文件。这种方法避免了一次拉入所有记录。

相关问题