scala - 如何通过Scala Spark-Shell将大RDD写入本地磁盘?

标签 scala hadoop apache-spark export rdd

通过 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/

相关文章:

java - 了解 LongWritable

hadoop - 读取BinStorage存储的数据集(从外部工具)

hadoop - Spark 提交,客户端无法通过 :[TOKEN, KERBEROS 进行身份验证];

python - Spark 数据帧 : Computing row-wise mean (or any aggregate operation)

scala - 在 Scala 宏中使用 Scala 反射

java - 查找正确的 jar 文件以使用 scala 示例

hadoop - 我可以自定义InputSplit以根据异常结束进行拆分

pandas - collect() 或 toPandas() 在 pyspark/EMR 中的大型 DataFrame 上

java - 如何从 scala 案例类生成 java 数组

Scala Set.contains 没有给出预期的类型不匹配错误