gpt4 book ai didi

apache-spark - 如何控制RDD分区的首选位置?

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

有没有办法手动设置RDD分区的首选位置?
我想确保在某台机器上计算某个分区。

我正在使用一个数组和 'Parallelize' 方法从中创建一个 RDD。

另外我没有使用 HDFS,文件在本地磁盘上。这就是为什么我要修改执行节点。

最佳答案

Is there a way to set the preferredLocations of RDD partitions manually?


是的,有,但它是特定于 RDD 的,所以不同种类的 RDD 有不同的方法来做到这一点。
Spark 用途 RDD.preferredLocations获取用于计算每个分区/拆分的首选位置列表(例如 HDFS 文件的块位置)。

final def preferredLocations(split: Partition): Seq[String]

Get the preferred locations of a partition, taking into account whether the RDD is checkpointed.


如您所见,方法是 final这意味着没有人可以覆盖它。
当你看 source codeRDD.preferredLocations您将看到 RDD 如何知道其首选位置。它正在使用 protected RDD.getPreferredLocations自定义 RDD 可以(但不必)覆盖以指定放置首选项的方法。
protected def getPreferredLocations(split: Partition): Seq[String] = Nil
所以,现在问题已经“演变”成另一个关于允许设置其首选位置的 RDD 的问题。找到你的并查看源代码。

I'm using an array and the 'Parallelize' method to create a RDD from that.


如果您 parallelize您的本地数据集不再是分布式的,并且可以是这样的,但是...为什么要使用 Spark 来处理可以在单个计算机/节点上本地处理的内容?
但是,如果您坚持并且确实想将 Spark 用于本地数据集,那么背后的 RDD SparkContext.parallelize是...让我们看看源代码... ParallelCollectionRDD其中 does allow for location preferences .
然后让我们将您的问题改写为以下内容(希望我不会丢失任何重要事实):

What are the operators that allow for creating a ParallelCollectionRDD and specifying the location preferences explicitly?


令我惊讶的是(因为我不知道该功能),有这样一个运算符,即 SparkContext.makeRDD ,即...接受每个对象的一个​​或多个位置首选项(Spark 节点的主机名)。

makeRDD[T](seq: Seq[(T, Seq[String])]): RDD[T] Distribute a local Scala collection to form an RDD, with one or more location preferences (hostnames of Spark nodes) for each object. Create a new partition for each collection item.


换句话说,而不是使用 parallelise您必须使用 makeRDD (这在 Scala 的 Spark Core API 中可用,但我不确定 Python,我将作为家庭练习留给你 :))
我将同样的推理应用于创建某种 RDD 的任何其他 RDD 运算符/转换。

关于apache-spark - 如何控制RDD分区的首选位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799726/

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