在Spark上使用并行集合是否有意义?
到目前为止我看到的所有Spark示例总是使用RDD的非常简单的数据类型(单个类和元组)。但实际上,集合和特定的并行集合可以用作RDD的居民。
工作者可能有多个可用于执行的核心,如果常规集合用作RDD驻留,则这些额外核心将保持空闲状态。
测试我和当地经理一起跑。
<div id="one" (click)="two.style.transform = (two.style.transform == 'translate(-100vh)') ? 'translate(0vh)' : 'translate(-100vh)'"></div>
<div id="two" #two></div>
在这种情况下,当我使用parArray时,我看到16个线程在工作,当我使用simple Array时,只有2个线程工作。这可能被视为2名拥有8个线程的工人。
另一方面,并行集合的每个逻辑都可以更改为简单类型的RDD转换。
是否鼓励使用这些并行集合并将其视为良好做法?
答案 0 :(得分:4)
是否鼓励使用这些并行集合并将其视为良好做法?
不太可能。考虑以下事实:
spark.task.cpus
明确询问任务中特定数量的线程,但它是全局设置,无法根据上下文进行调整,因此无论您是否使用它们,都可以有效地阻止资源并行收集相当复杂且难以管理(隐式线程池)。这对于更多的基本线程管理是有好处的,但Spark本身内置了更复杂的并行化。