从另一个访问特定的 RDD 分区
Posted
技术标签:
【中文标题】从另一个访问特定的 RDD 分区【英文标题】:Access to a particular RDD partition from one other 【发布时间】:2015-08-14 17:25:38 【问题描述】:当我使用mapPartition
或其他函数时,我想从当前分区上的分区旁边获取元素。
更一般地说,我很想知道如何从 RDD 访问特定分区。
val rdd = sc.parallelize(Array(1,2,3,4,5,6,7,8,9,10,11,12),4)
我愿意
val rdd_2 = rdd.something(2) = RDD[Array(4,5,6)]
如果不清楚,请告诉我。
【问题讨论】:
你能举个例子解释一下吗? 【参考方案1】:更一般地说,我很想知道如何从 RDD 访问特定分区。
出于调试目的,您可以使用TaskContext
import org.apache.spark.TaskContext
rdd
.mapPartitions(iter => Iterator((TaskContext.get.partitionId, iter.toList)))
.filtercase (k, _) => k == 1
.values
在内部,Spark 使用 runJob
仅对选定的分区进行操作。
当我使用 mapPartition 或其他函数时,我想从当前分区上的分区旁边获取元素。
可能有一些 hacky 方法来实现这样的事情,但一般来说这是不可能的。每个分区都可以独立处理的假设几乎是 Spark 计算模型背后的核心概念。
如果您想一次访问某些特定的数据子集,您可以使用自定义分区器。
【讨论】:
以上是关于从另一个访问特定的 RDD 分区的主要内容,如果未能解决你的问题,请参考以下文章
在每个分区内具有共享指针的 Spark RDD(以及幻数 200??)