通过 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 堆重载了。
有没有一种方法可以增量导出数据(例如一次 100k 条记录),这样我就不会重载系统内存?
最佳答案
当您使用saveAsTextFile
时,您可以将文件路径作为“file:///path/to/output”
传递以将其保存在本地。
另一个选择是使用 rdd.toLocalIterator ,这将允许您迭代驱动程序上的 rdd 。然后您可以将每一行写入一个文件。此方法避免一次拉取所有记录。
关于scala - 如何通过Scala Spark-Shell将大RDD写入本地磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45507583/