我告诉使用Spark时,建议的工作人员数量是每个核心一个。虽然工作人员的数量远远高于计算机上的核心,但我的性能并没有下降。为什么会这样?
from time import time
from pyspark import SparkContext
for j in range(1, 10):
sc = SparkContext(master="local[%d]" % (j))
t0 = time()
for i in range(10):
sc.parallelize([1, 2] * 1000000).reduce(lambda x, y: x + y)
print("%2d executors, time=%4.3f" % (j, time() - t0))
sc.stop()
# 1 executors time=6.112
# 2 executors time=5.202
# 3 executors time=4.695
# 4 executors time=5.090
# 5 executors time=5.262
# 6 executors time=5.156
# 7 executors time=5.274
# 8 executors time=5.376
# 9 executors time=5.124
硬件规格:
答案 0 :(得分:1)
你没有衡量任何有用的东西。如此少量的数据处理时间可以忽略不计:
Cells(j + 7, 2).Value = Replace(Replace(mystring, "Nat Rep feasibility check for ", ""), " - Details by Region", "")
实际延迟几乎完全由初始化时间引起,并且在较小程度上由调度开销引起。
另外
使用Spark时,建议的工作人员数量为每个核心一个。
不是很正确。许多Spark作业都是IO限制的,建议使用超额订阅资源。
最大的担忧是,如果任务变得很小(比如这里),启动任务的成本大于处理成本。在实践中,您的处理器每秒都会多次切换线程 - 添加一些额外的线程只是赢得了很大的不同。