Caching Apache Spark缓存工作不正常
我正在运行一个非常简单的程序,它计算S3文件中的单词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
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]