首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何优化pyspark以跨所有节点使用所有核心?

如何优化pyspark以跨所有节点使用所有核心?
EN

Stack Overflow用户
提问于 2021-09-06 18:08:41
回答 1查看 33关注 0票数 0

所以我在Google DataProc中运行了一个5节点的集群,每个节点有16个核心。

假设在1000行上应用一个简单的函数在50秒内完成。

代码语言:javascript
运行
复制
rows = df.limit(1000).collect()
[func(row) for row in rows] # runs ~50secs

在我的假设中,如果我充分利用集群中的所有内核,那么我的运行时间将大致为:

代码语言:javascript
运行
复制
total_cores = n_nodes * (n_core_per_node - 1)
total_cores = 5 * 15 = 75

50secs / 75cores = 0.667secs runtime across 1000 rows

因此,我将df划分为75,这样每个executor中就有15个分区。由于每个执行程序都有15个核心,因此每个分区都会有自己的核心:

代码语言:javascript
运行
复制
conf = spark.sparkContext._conf.setAll([
    ('spark.executor.cores', '15'), 
    ('spark.executor.instances', '5')
])
spark = SparkSession.builder.config(conf=conf).getOrCreate()
df.limit(1000).repartition(75).foreachPartition(func) # runs ~7secs

但是我没有得到我所期望的结果(运行时间大约为0.667秒)。

我遗漏了什么?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-09-06 18:30:27

documentation声明了以下内容:

Spark属性主要可以分为两类:一类是与deploy相关的属性,如spark.driver.memoryspark.executor.instances,这类属性在运行时通过SparkConf进行编程设置时可能不会受到影响,或者其行为取决于您选择的集群管理器和部署模式,因此建议通过配置文件或spark-submit命令行选项进行设置

您的代码似乎是在运行时设置配置。按照他们的建议,尝试通过配置文件或命令行设置它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69078737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档