Apache spark pyspark缓存似乎没有加速
在这里,我使用pyspark进行简单的字数计算,我使用了cache方法,但在第二次运行代码时似乎没有加快速度:Apache spark pyspark缓存似乎没有加速,apache-spark,caching,pyspark,Apache Spark,Caching,Pyspark,在这里,我使用pyspark进行简单的字数计算,我使用了cache方法,但在第二次运行代码时似乎没有加快速度: from pyspark import SparkContext from time import time if __name__=='__main__': sc=SparkContext() rdd=sc.textFile("shakespear.txt") rdd.cache() t1=time() rdd.flatMap(lambda r
from pyspark import SparkContext
from time import time
if __name__=='__main__':
sc=SparkContext()
rdd=sc.textFile("shakespear.txt")
rdd.cache()
t1=time()
rdd.flatMap(lambda r:r.split(" "))\
.map(lambda w:(w,1))\
.reduceByKey(lambda x,y:x+y)\
.collect()
t2=time()
print t2-t1
t3=time()
rdd.flatMap(lambda r:r.split(" "))\
.map(lambda w:(w,1))\
.reduceByKey(lambda x,y:x+y)\
.collect()
t4=time()
print t4-t3
结果是:
3.87242698669
2.49692296982
如果我注释掉rdd.cache,结果是:
3.58677482605
2.52048921585
在阅读spark文档时,我被告知缓存将大大加快进程,对吗?但在这里,它并没有太大的区别,有谁能给我一个关于这个特定问题的提示吗?全面介绍spark cache的工作原理将非常棒!谢谢 该文本文件可能足够小,以至于Spark会在会话期间隐式缓存它,因此两次运行之间没有太大区别,也就是为什么第二次调用rdd在两次运行中都会稍微快一些。首先,调用缓存不会计算任何内容。它只指定在计算RDD时,缓存结果。RDD的计算仅由诸如collect之类的操作触发 但是,只有在第二次访问中使用了对RDD的相同引用时,才能使用缓存。例如,下面是上面程序的一个版本,其中第二次计算将实际使用缓存:
from pyspark import SparkContext
from time import time
if __name__=='__main__':
sc=SparkContext()
rdd=sc.textFile("shakespear.txt")
rdd.cache()
t1=time()
rdd2 = rdd.flatMap(lambda r:r.split(" "))\
.map(lambda w:(w,1))\
.reduceByKey(lambda x,y:x+y)\
rdd2.collect()
t2=time()
print t2-t1
t3=time()
rdd2.collect()
t4=time()
print t4-t3
注意,我创建了一个名为rdd2的新变量,它定义了要重新计算的转换