繁体   English   中英

Spark没有减少任何并行化

[英]Spark is not utlizing any parallization on reduction

我是一个新手。 我正在使用python(pyspark)编写程序。 我使用groupByKey函数将键值对转换为键(值列表)对。 我在64核计算机上运行spark,并尝试通过使用以下命令启动程序来使用所有64核。

spark-submit --master local[64] my_program.py

但是,我注意到在执行groupByKey函数时,仅使用了一个内核。 数据很大。 那么,为什么spark不将其划分为64个分区,而在64个不同的内核中进行归约/分组呢?

我是否缺少并行化的重要步骤?

代码的相关部分如下所示:

# Here input itself is a key-(list of values) pair. The mapPartitions
# function is used to return a key-value pair (variable x), from
# which another key-(list of values) pair is created (variable y)
x = input.mapPartitions(transFunc)
# x contains key value pair, such as [(k1, v1), (k1, v2), (k2, v3)]
y = x.groupByKey()
# y contains key-list of values pair such as [(k1, [v1, v2]), (k2, [v2])]

Spark中的默认并行度级别由配置选项: spark.default.parallelism 默认值为:(*来自docs

本地模式:本地计算机上的内核数Mesos细粒度模式:8其他:所有执行程序节点上的内核总数或2,以较大者为准

可以使用以下操作将RDD重新划分为更多或更少的分区:

rdd.repartition(partitions: Int) // redistributes the RDD into the given nr of partitions
rdd.coalesce(partitions:Int) // reduces the number of partitions of the RDD to the given nr

需要内部numPartitions操作通常采用numPartitions参数来指定目标分区的数量。 执行此操作后,RDD将具有该新数量的分区。 让我用一个例子来说明:

鉴于:

val rdd = sc.textFile("localFile")  // default nr of partitions. Let's say 2

然后:

val moreParallelRdd = rdd.repartition(64) // 64 partitions
val onePartitionRdd = moreParallelRdd.coalesce(1) // 1 partition
val sortedRdd = onePartitionRdd.sortBy(x=> sortSelector(x), numPartitions=10) // 10 partitions 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM