从另一个访问特定RDD分区

时间:2015-08-14 17:25:38

标签: scala apache-spark rdd

当我使用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 个答案:

答案 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计算模型背后的核心概念。

如果要一次访问某些特定数据子集,可以使用自定义分区程序。