从另一个访问特定的 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??)

从另一个 Magnolia 模块访问 Spring 服务(不使用 Spring Blossom)

谈hadoop/spark里分别是如何实现容错性