Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark pyspark缓存似乎没有加速_Apache Spark_Caching_Pyspark - Fatal编程技术网

Apache spark pyspark缓存似乎没有加速

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

在这里,我使用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: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的新变量,它定义了要重新计算的转换