【发布时间】:2015-06-02 04:20:20
【问题描述】:
作为 Spark 的新手,我一直在查看他们的 python example for estimation of PI。
我有兴趣通过在同一上下文中多次重新估计 PI 来了解 Spark 的性能。
我观察到,在这些重新估计中,PI 的值没有变化,性能时序似乎表明中间 RDD 被隐式缓存,然后在后续计算中重复使用。
有没有办法配置 Spark 来控制这种行为,并且中间 RDD 总是重新生成?使用 unpersist() 似乎没有效果。
我产生这个问题的代码是github上的here,通过调用来执行
`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)`
【问题讨论】:
-
我有一种感觉,由于你的种子调用,你从随机获得相同的价值
-
我没有在您的代码中看到对
cache的显式调用。 -
无论是否调用seed(),我都会得到相同的结果。但是,我将它包括在内以在每个测试中强制为随机数生成一个新种子 - 根据 python 文档(9.6),它应该使用系统时间作为种子值。
-
显式调用缓存——正是我的观点!代码性能和相同的结果表明正在发生缓存,当我预计中间 RDD 被丢弃时 - 即对于每个“无缓存”测试,我预计 PI 的值不同。然后我调用persist()(相当于cache()),然后我希望它持久化中间RDD,这样所有的'With caching'结果应该是相同的并且明显更快。
标签: caching apache-spark persist rdd