首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果两个阶段使用相同的RDD,那么spark是否两次读取同一个文件?

如果两个阶段使用相同的RDD,那么spark是否两次读取同一个文件?
EN

Stack Overflow用户
提问于 2016-06-18 06:43:58
回答 1查看 1.5K关注 0票数 2

在Spark中,以下代码

代码语言:javascript
运行
复制
rdd = sc.textfile("file path")
rdd1 = rdd.filter(filter1).maptopair();
rdd2 = rdd.filter(filter2).maptopair();
rdd3 = rdd1.join(rdd2);
rdd3.saveastextfile();

将产生3个阶段。从Spark中,我看到第1阶段和第2阶段并行运行,在完成前两个阶段之后将触发连接阶段(第3阶段)。我的问题是第一阶段和第二阶段同时读取同一文件?也就是说斯派克读了同一份文件两次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-18 14:47:24

是的,它会读两遍。

更长的答案是,如果初始读取已经在内存中(缓存/OS缓存),那么它将使用直接读取。如果不深入研究实现,那么您的特定场景很可能导致同时读取。尽管如此,原因恰恰是创建DataFrames的原因。代码是一个黑匣子,所以对于调度程序来说,除了部分共享的沿袭之外,整个阶段(read和map*)是不同的。而且,如前所述,如果可以,它将重用任何已经缓存的沿袭。

如果您想要更多的共享,请使用DataFrames,它非常了解整个血统,以及它可以从合并操作中获益的地方。例如,如果您使用您的代码并将其推送到SQL中,那么您将看到您正在寻找的合并。

*我猜您的意思是map而不是filter,因为join不起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37894099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档