Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 如果两个阶段使用相同的RDD,spark是否读取相同的文件两次?_Apache Spark - Fatal编程技术网

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

Apache spark 如果两个阶段使用相同的RDD,spark是否读取相同的文件两次?,apache-spark,Apache Spark,在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阶段并行运行,前两个阶段完成后将触发join阶段(第3阶段)。 我的问题是阶段1和阶段2同

在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阶段并行运行,前两个阶段完成后将触发join阶段(第3阶段)。 我的问题是阶段1和阶段2同时读取同一个文件?
这意味着Spark将同一文件读取两次?

TL;博士是的,它会读两遍

较长的答案是,如果初始读取已经在内存(缓存/OS缓存)中,那么它将通过直接读取来使用它。如果不深入研究实现,您的特定场景很可能会导致同时读取。也就是说,这正是创建数据帧的原因。代码是一个黑盒子,因此除了部分共享的沿袭之外,整个阶段(read和map*)就调度程序而言是不同的。而且,如前所述,它将在可能的情况下重用任何已经缓存的沿袭

如果您想要更共享的东西,请使用DataFrames和它对完整沿袭的深入了解,以及它可以从合并操作中获益的地方。例如,如果您获取代码并通过SQL将其推送,那么您将看到正在寻找的合并


*我想你的意思是
map
而不是
filter
,因为
join
否则不会起作用。

好吧,除了此代码之外的性能在运行时或编译过程中都会失败。如果你使用2个
filter
操作,那么这可以组合成一个步骤,而无需
join