作为星火的新手,我一直在看他们的PI估计的python示例。
我有兴趣了解星火的表现,通过重新估计PI几次在相同的背景下。
我所观察到的是,PI的值在这些重估中是不变的,性能时间似乎表明中间RDDs被隐式缓存,然后在随后的计算中被重用。
是否有任何方法来配置星火来控制这种行为,并且中间RDDs总是被重新生成?未持久化()似乎没有任何效果。
生成此问题的代码是github上的这里,通过调用
`spark-submit pi2.py` 若要获得以下结果,请执行以下操作:
No caching-0: 8000 generated 6256 in 1.14984297752 secs (PI = 3.128)
No caching-1: 8000 generated 6256 in 0.0597329139709 secs (PI = 3.128)
No caching-2: 8000 generated 6256 in 0.0577840805054 secs (PI = 3.128)
No caching-3: 8000 generated 6256 in 0.0545349121094 secs (PI = 3.128)
No caching-4: 8000 generated 6256 in 0.0544559955597 secs (PI = 3.128)
With caching-0: 8000 generated 6256 in 0.069139957428 secs (PI = 3.128)
With caching-1: 8000 generated 6256 in 0.0549170970917 secs (PI = 3.128)
With caching-2: 8000 generated 6256 in 0.0531771183014 secs (PI = 3.128)
With caching-3: 8000 generated 6256 in 0.0502359867096 secs (PI = 3.128)
With caching-4: 8000 generated 6256 in 0.0557379722595 secs (PI = 3.128)`发布于 2015-06-02 22:22:05
这里发生了一些事情。首先,您实际上没有缓存RDD。从你的Github链接:
# Now persist the intermediate result
sc.parallelize(xrange(1, n + 1), partitions).map(f).persist()这将创建一个新的RDD,执行一个映射,然后持久化得到的RDD。你没有保留对它的引用,所以它实际上已经消失了。
接下来,第一次运行可能较慢,因为Spark将向您的员工广播您的功能。所以在工作中有一些缓存,但不是数据缓存,而是代码缓存。
最后,随机性:seed()在您的驱动程序中为您的RNG种子。种子值在第一次运行时与f()一起向所有工作人员广播(因为种子是在random()中引用的)。现在再次调用seed()时,它会更改驱动程序中的种子,而不是已经发送给工作人员的函数版本中的种子,因此可以一次又一次地获得相同的结果。
https://stackoverflow.com/questions/30587257
复制相似问题