我只是试图找到一种方法来获取Spark中RDD分区的位置。
调用RDD.repartition()
或PairRDD.combineByKey()
后,返回的RDD被分区。我想知道分区所在的工作实例(用于检查分区行为)?!
有人可以提供线索吗?
答案 0 :(得分:0)
一个有趣的问题,我肯定没有那么多有趣的答案:)
首先,将转换应用于RDD与工作实例无关,因为它们是独立的“实体”。转换创建 RDD沿袭(=逻辑计划),而执行者只有在执行操作后才会进入阶段(没有双关语)(并且DAGScheduler将逻辑计划转换为执行计划作为一组阶段,任务)。
因此,我认为了解执行分区执行的唯一方法是使用org.apache.spark.SparkEnv来访问与单个执行程序相对应的BlockManager。这正是Spark知道/跟踪执行者(由他们的BlockManagers)。
您可以编写org.apache.spark.scheduler.SparkListener来拦截onExecutorAdded
,onBlockManagerAdded
及其*Removed
对应方,以了解如何将执行程序映射到BlockManagers(但相信SparkEnv
就足够了。