【问题标题】:How partitions work in spark parallelize? [duplicate]分区如何在火花并行化中工作? [复制]
【发布时间】:2018-01-06 08:47:18
【问题描述】:

我为 Spark 编写以下代码:

val longList = 1 to 1000000 toList
val numsToAdd = sc.parallelize(longList,30)
val st = System.nanoTime()
println(numsToAdd.reduce((x,y) => x+y))
val et = System.nanoTime()
println("Time spend:"+(et-st))

我使用不同的分区值执行并行化转换。 时间花费如下:

 Partitions     Time spend

 default        97916961

 10             111907094

 20             141691820

 30             158264230

我的理解是,使用 partitions 参数,spark 将数据集划分为多个部分,并对每个部分执行并行操作。所以直观来说,越多分区越快的一定是程序。

但似乎恰恰相反。

我在本地机器上运行我的程序。

分区是否以其他方式工作?

【问题讨论】:

  • 您的数据集太小,无法真正利用 Spark 的优势。只要数据适合内存,就不要使用 Spark,而是使用普通的 Scala 集合 API

标签: apache-spark rdd


【解决方案1】:

一般来说,更小/更多的分区允许工作 分布在更多的工人中,但更大/更少的分区允许工作 以更大的块完成,这可能导致工作完成 只要所有工人都保持忙碌,速度就会更快,因为减少了 高架。

增加分区数将使每个分区都有 更少的数据(或根本没有!)

分区太少您不会利用集群中所有可用的核心。

分区太多管理许多小任务会产生过多的开销。

根据 spark docs 的理想值是核心数的 2-3 倍。

Spark RDD Partition

Spark Repartition

【讨论】:

    猜你喜欢
    • 2017-12-25
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多