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

最佳答案

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

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

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

*我假设您的意思是 map 而不是 filter,因为否则 join 将无法工作。

关于apache-spark - 如果两个阶段使用相同的 RDD,spark 是否会读取同一个文件两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894099/

相关文章:

scala - 如何根据 Spark-scala 中的过滤器将数据集分为两部分

scala - 在 Spark 中读取文件时出错

apache-spark - Spark --num-executors 和分区数

apache-spark - spark2.xx 是否支持 delta lake

scala - BucketedRandomProjectionLSH 的性能 (org.apache.spark.ml.feature.BucketedRandomProjectionLSH)

python-2.7 - 使用 LinearRegression 时出现断言错误

apache-spark - Spark Structured Streaming 如何确定事件已晚到?

apache-spark - Apache Spark 文本相似度

apache-spark - 有没有办法在pyspark中获取列数据类型?

apache-spark - 使用 spark dataFrame 从 HDFS 加载数据