Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Caching Apache Spark缓存工作不正常_Caching_Apache Spark_Rdd - Fatal编程技术网

Caching Apache Spark缓存工作不正常

Caching Apache Spark缓存工作不正常,caching,apache-spark,rdd,Caching,Apache Spark,Rdd,我正在运行一个非常简单的程序,它计算S3文件中的单词 JavaRDD<String> rdd = sparkContext.getSc().textFile("s3n://" + S3Plugin.s3Bucket + "/" + "*", 10); JavaRDD<String> words = rdd.flatMap(s -> java.util.Arrays.asList(s.split(" ")).iterator()).persist(Stor

我正在运行一个非常简单的程序,它计算S3文件中的单词

 JavaRDD<String> rdd = sparkContext.getSc().textFile("s3n://" + S3Plugin.s3Bucket + "/" + "*", 10);

    JavaRDD<String> words = rdd.flatMap(s -> java.util.Arrays.asList(s.split(" ")).iterator()).persist(StorageLevel.MEMORY_AND_DISK_SER());
    JavaPairRDD<String, Integer> pairs = words.mapToPair(s -> new Tuple2<String, Integer>(s, 1)).persist(StorageLevel.MEMORY_AND_DISK_SER());
    JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b).persist(StorageLevel.MEMORY_AND_DISK_SER());
    //counts.cache();

    Map m = counts.collectAsMap();

    System.out.println(m);
我的理解是,当我们缓存RDD时,它不会再次执行操作并从缓存中获取数据

所以我需要理解为什么Spark不使用缓存的rdd,而是在流程再次运行时创建一个新的缓存条目


spark是否允许跨作业使用缓存RDD,或者它是否仅在当前上下文中可用?在日志中,它将显示整个阶段,但当您转到localhost:4040时,您会看到由于缓存而跳过一些任务,因此使用spark UI更正确地监视作业localhost:4040缓存数据仅在您的作业长度内持续存在火花应用。如果再次运行应用程序,您将无法使用以前运行的应用程序的缓存结果。

我查看了各个阶段,但它没有显示任何用于重新运行程序的跳过任务。虽然它会在存储部分中创建一个新条目,这意味着它无法在重新运行程序时重用缓存RDD缓存在当前SparkContext中,但当您多次执行同一脚本时,即使是在相同的数据上,您仍然会创建不同的SparkContext,因此缓存不再有效。只有在同一SparkContext中多次使用同一RDD时,它才有用。这种行为没有什么出人意料的。
[Stage 12:===================================================>     (9 + 1) / 10]