gpt4 book ai didi

scala - 在 Spark 中鼓励使用并行集合

转载 作者:行者123 更新时间:2023-12-04 00:06:22 25 4
gpt4 key购买 nike

在 Spark 上使用并行集合有意义吗?

到目前为止,我看到的所有 Spark 示例都使用非常简单的数据类型(单类和元组)的 RDD。但实际上集合,特别是并行集合可以用作 RDD 的居民。

工作线程可能有多个可用于执行的核心,如果使用常规集合作为 RDD 驻留,这些额外的核心将保持空闲。

测试我与本地经理一起运行。

val conf: SparkConf = new SparkConf().setAppName("myApp").setMaster("local[2]")
val sc = new SparkContext(conf)

val l = List(1,2,3,4,5,6,7,8)
val l1 = l.map(item => (item, 1 to item toList))
val l2 = l1.map(item => (item._1, item._2.toParArray))
val l3 = sc.parallelize(l2)
l3.sortBy(_._1).foreach(t => t._2.map(x => {println(t._1 + " " +Thread.currentThread.getName); x / 2}))

在这种情况下,当我使用 parArray 时,我看到 16 个线程在工作,而当我使用 simple Array 时,只有 2 个线程在工作。这可以看作是 2 个 worker 拥有 8 个可用线程。

另一方面,并​​行集合的每个逻辑都可以更改为简单类型的 RDD 转换。

是否鼓励使用这些并行集合并被认为是好的做法?

最佳答案

Is using those parallel collections encouraged and considered good practice?



不太可能。考虑以下事实:
  • 任务内的任何并行执行对于资源管理器来说都是完全不透明的,因此它无法自动分配所需的资源。
  • 您可以使用 spark.task.cpus在任务中明确要求特定数量的线程,但这是一个全局设置,无法根据上下文进行调整,因此无论您是否使用它们,您都可以有效地阻止资源。
  • 如果线程未充分利用是一个有效的问题,您可以随时增加分区数。

  • 最后让我们 quote Reynold Xin :

    Parallel collection is fairly complicated and difficult to manage (implicit thread pools). It is good for more the basic thread management, but Spark itself has much more sophisticated parallelization built-in.

    关于scala - 在 Spark 中鼓励使用并行集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41426576/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com