如何解决JavaRDD.mapf-> {...};代码被跳过
我是Spark的新手。我的代码出现意外行为。谁能向我解释为什么?
run_prog
其行为是 // Compute results
JavaRDD<Result> resultJavaRDD = inputRdd.map(f -> {
// this code block is skipped
System.out.println("computation starts");
......
// call computation method
ResultGenerator resultGenerator = new ResultGenerator();
Result result = resultGenerator.run();
return result;
});
// Persist results
resultJavaRDD.cache(); // result directly jumped here
JavaRDD<Integer> returnedIds = resultJavaRDD.map( r -> persistResult(r));
returnedIds.cache();
returnedIds.collect();
内部的代码块被跳过,并直接命中inputRdd.map(f->{});
行。
但是,如果我在下面做某事
resultJavaRdd.cache()
该代码块不会被跳过。谁能解释为什么?
解决方法
由于rdd的map函数是一个转换,因此它是惰性函数。调用任何动作后,也会调用该动作,但是如果没有动作,则不会调用。
请参阅spark documentation中的rdd基础知识。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。