gpt4 book ai didi

apache-spark - Spark : Best practice for retrieving big data from RDD to local machine

转载 作者:行者123 更新时间:2023-12-03 07:25:22 25 4
gpt4 key购买 nike

我在 yarn 集群中有很大的 RDD(1gb)。在使用此集群的本地计算机上,我只有 512 MB。我想在本地计算机上迭代 RDD 中的值。我不能使用collect(),因为它会在本地创建太大的数组,超过我的堆。我需要一些迭代的方法。有方法 iterator(),但它需要一些额外的信息,我无法提供。

UDP:提交给LocalIterator方法

最佳答案

更新: 在编写原始答案后出现的 RDD.toLocalIterator 方法是完成这项工作的更有效方法。它使用 runJob 在每个步骤中仅评估单个分区。

TL;DR 最初的答案可能会给出一个粗略的想法:

首先,获取分区索引数组:

val parts = rdd.partitions

然后创建较小的 rdd,过滤掉除单个分区之外的所有内容。从较小的 rdd 收集数据并迭代单个分区的值:

for (p <- parts) {
val idx = p.index
val partRdd = rdd.mapPartitionsWithIndex(a => if (a._1 == idx) a._2 else Iterator(), true)
//The second argument is true to avoid rdd reshuffling
val data = partRdd.collect //data contains all values from a single partition
//in the form of array
//Now you can do with the data whatever you want: iterate, save to a file, etc.
}

我没有尝试这段代码,但它应该可以工作。如果无法编译,请写评论。当然,只有当分区足够小时它才会起作用。如果不是,您可以随时使用 rdd.coalesce(numParts, true) 增加分区数量。

关于apache-spark - Spark : Best practice for retrieving big data from RDD to local machine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21698443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com