Spark 中的并行集合
Posted
技术标签:
【中文标题】Spark 中的并行集合【英文标题】:Parallelised collections in Spark 【发布时间】:2018-05-05 17:49:59 【问题描述】:Spark 中“并行集合”的概念是什么,这个概念如何提高作业的整体性能?此外,应该如何配置分区?
【问题讨论】:
【参考方案1】:Scala 语言中提供了并行集合,作为在 Scala 中并行化数据处理的一种简单方法。基本思想是,当您对集合执行map
、filter
等操作时,可以使用线程池对其进行并行化。这种类型的并行化称为数据并行化,因为它是基于数据本身的。这发生在 JVM 本地,Scala 将使用与 JVM 可用的内核一样多的线程。
另一方面,Spark 基于 RDD,这是一种表示分布式数据集的抽象。与 Scala 并行集合不同,此数据集分布在多个节点中。 Spark也是基于数据并行的,不过这次是分布式数据并行。这允许您进行比在单个 JVM 中更多的并行化,但它也引入了与数据混洗相关的其他问题。
总之,Spark 实现了一个分布式数据并行系统,因此每次执行map
、filter
等...时,您所做的事情类似于 Scala 并行集合所做的事情,但是以分布式方式执行的。此外,Spark 中的并行单位是分区,而 Scala 集合中是每一行。
您始终可以在 Spark 任务中使用 Scala 并行集合在 Spark 任务中进行并行化,但不一定会看到性能提升,特别是如果您的数据已经均匀分布在 RDD 中并且每个任务需要大约相同的计算要执行的资源。
【讨论】:
@AndreyTyukin 你有什么意见? @AndreyTyukin 你说得对,我概括的太多了,我已经编辑了我想说的更准确 确保仅在元素的索引无关紧要时才使用parallelize()方法,因为一旦并行化到分区,任何转换都会在分区上并行完成。以上是关于Spark 中的并行集合的主要内容,如果未能解决你的问题,请参考以下文章