apache-spark - 将分区分配给不同的执行器而不是执行器线程
问题描述
我有 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 个任务的队列。执行器线程会拾取它们,但由于这些process
es 内部会积累内存,我希望它们每个都在单独的机器上。
有什么诀窍可以实现吗?比如,用 15 个空占位符或类似的东西填充 RDD 元素?