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

2023-12-29

在 Spark 中,如下代码

rdd = sc.textfile("file path")
rdd1 = rdd.filter(filter1).maptopair();
rdd2 = rdd.filter(filter2).maptopair();
rdd3 = rdd1.join(rdd2);
rdd3.saveastextfile();

将生成3个阶段。从 Spark Web UI 中,我看到阶段 1 和阶段 2 并行运行,并且在前两个阶段完成后将触发连接阶段(阶段 3)。 我的问题是阶段 1 和阶段 2 同时读取同一个文件? 这意味着 Spark 读取同一个文件两次?


TL;博士;是的,它会读两次。

更长的答案是,如果初始读取已经在内存(缓存/操作系统缓存)中,那么它将使用它而不是直接读取。如果不深入研究实现,您的特定场景很可能会导致同时读取。也就是说,原因正是创建 DataFrame 的原因。代码是一个黑匣子,因此除了部分共享的沿袭之外,就调度程序而言,整个阶段(读取和映射*)是不同的。而且,正如已经提到的,它会在可能的情况下重用任何已缓存的谱系。

如果您想要更多共享的内容,请使用 DataFrames,它对完整的谱系以及它可以从合并操作中受益的地方有深入的了解。例如,如果您获取代码并通过 SQL 推送它,那么您就会看到您正在寻找的合并。

*我假设你的意思是map代替filter as join否则就行不通。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果两个阶段使用相同的 RDD,spark 是否会读取同一个文件两次? 的相关文章

随机推荐