首页 > 解决方案 > 将分区分配给不同的执行器而不是执行器线程

问题描述

我有 4 个非常记忆密集的操作。

我的技术栈使用机器,每个执行程序有 16 个线程。

我希望每个操作在不同的执行器上运行,而不是在同一执行器的 4 个不同线程上运行。

我准备这样的分区:

counter_parts = sparkContext.parallelize([
            (key1, list_of_paths_to_process1),
            (key2, list_of_paths_to_process2),
            (key3, list_of_paths_to_process3),
            (key4, list_of_paths_to_process4)
], 4)
counter_parts.mapPartitions(lambda x: process(x))

所以 4 个分区将创建 4 个任务的队列。执行器线程会拾取它们,但由于这些processes 内部会积累内存,我希望它们每个都在单独的机器上。

有什么诀窍可以实现吗?比如,用 15 个空占位符或类似的东西填充 RDD 元素?

标签: apache-sparkpyspark

解决方案


推荐阅读