使用 Spark RDD 查找路径成本
Use Spark RDD to Find Path Cost
我正在使用 Spark 设计 TSP 求解器。本质上,RDD 中的每个元素都是一个三元组 (id, x, y)
,其中 id
是一个点的索引,x-y
是该点的坐标。给定一个存储三元组序列的 RDD,我如何评估这个序列的路径成本?例如,序列 (1, 0, 0), (2, 0, 1), (3, 1, 1) 将给出成本 1 + 1 = 2
(从第一个点到第二个点再到第三点)。似乎为了做到这一点,我必须知道 Spark 究竟是如何划分序列 (RDD) 的。另外,如何评估两个分区的边界点之间的成本?或者有什么简单的操作可以让我做到这一点吗?
对于任何并行处理,您都需要认真考虑什么是单个数据元素,以便只有需要在一起的数据在一起。
因此,不是让每一行都是一个点,而是每一行应该是定义路径的点数组,此时使用 Spark 计算总路径长度变得容易。您只需使用您通常使用的任何东西来计算给定定义点的线段数组的总长度。
但即便如此,我们仍不清楚我们是否需要全面的点数。对于TSP,一个候选解是一条包含所有位置的路径,这意味着我们不需要为每个解都存储城市的位置,也不需要每次都计算距离。我们只需要计算一个距离矩阵,然后我们可以广播它,这样每个 Spark worker 都可以访问它,然后查找距离而不是计算它们。
(实际上是location id的排列,而不只是一个列表,这样可以更简化事情。)
我正在使用 Spark 设计 TSP 求解器。本质上,RDD 中的每个元素都是一个三元组 (id, x, y)
,其中 id
是一个点的索引,x-y
是该点的坐标。给定一个存储三元组序列的 RDD,我如何评估这个序列的路径成本?例如,序列 (1, 0, 0), (2, 0, 1), (3, 1, 1) 将给出成本 1 + 1 = 2
(从第一个点到第二个点再到第三点)。似乎为了做到这一点,我必须知道 Spark 究竟是如何划分序列 (RDD) 的。另外,如何评估两个分区的边界点之间的成本?或者有什么简单的操作可以让我做到这一点吗?
对于任何并行处理,您都需要认真考虑什么是单个数据元素,以便只有需要在一起的数据在一起。
因此,不是让每一行都是一个点,而是每一行应该是定义路径的点数组,此时使用 Spark 计算总路径长度变得容易。您只需使用您通常使用的任何东西来计算给定定义点的线段数组的总长度。
但即便如此,我们仍不清楚我们是否需要全面的点数。对于TSP,一个候选解是一条包含所有位置的路径,这意味着我们不需要为每个解都存储城市的位置,也不需要每次都计算距离。我们只需要计算一个距离矩阵,然后我们可以广播它,这样每个 Spark worker 都可以访问它,然后查找距离而不是计算它们。
(实际上是location id的排列,而不只是一个列表,这样可以更简化事情。)