当我使用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)]
谢谢你告诉我,目前还不清楚。
答案 0 :(得分:2)
更一般地说,我很想知道如何从RDD访问特定分区。
出于调试目的,您可以使用TaskContext
import org.apache.spark.TaskContext
rdd
.mapPartitions(iter => Iterator((TaskContext.get.partitionId, iter.toList)))
.filter{case (k, _) => k == 1}
.values
内部Spark正在使用runJob
仅在选定的分区上运行。
当我使用mapPartition或其他函数时,我希望从当前分区的分区旁边获取元素。
可能有一些hacky方式来实现这样的事情,但一般来说这是不可能的。假设每个分区可以独立处理,这几乎是Spark计算模型背后的核心概念。
如果要一次访问某些特定数据子集,可以使用自定义分区程序。