apache-spark - 为多次引用该数据帧的单个 Action Spark 应用程序缓存数据帧是否有效?

标签 apache-spark

我对 Spark 的缓存机制有点困惑。

假设我有一个 Spark 应用程序,在多个转换结束时只有一个操作。其中假设我有一个数据帧 A 并且我对其应用了 2-3 转换,创建了多个数据帧,最终有助于创建将保存到磁盘的最后一个数据帧。

例子 :

val A=spark.read() // large size
val B=A.map()
val C=A.map()
.
.
.
val D=B.join(C)
D.save()

那么我是否需要缓存数据帧 A 以提高性能?

提前致谢。

最佳答案

是的,你是对的。

您应该将 A 缓存为用于 B 和 C 作为输入。 DAG 可视化将显示重用或返回源的程度(在这种情况下)。如果您有一个嘈杂的集群,则可能会发生一些溢出到磁盘的情况。

另请参阅此处的最佳答案 (Why) do we need to call cache or persist on a RDD

然而,我正在寻找跳过的阶段,愚蠢的我。但其他内容如下所示。

以下代码类似于您自己的代码:

val aa = spark.sparkContext.textFile("/FileStore/tables/filter_words.txt")//.cache
val a = aa.flatMap(x => x.split(" ")).map(_.trim) 
val b=a.map(x => (x,1)) 
val c=a.map(x => (x,2)) 
val d=b.join(c)
d.count

使用 .cache 查看 UI

enter image description here

并且没有 .cache

enter image description here

QED:所以,.cache 有好处。否则就没有意义了。此外,在某些情况下,2 次读取可能会导致不同的结果。

关于apache-spark - 为多次引用该数据帧的单个 Action Spark 应用程序缓存数据帧是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59178418/

相关文章:

python - 使用条件结果列连接 PySpark 数据框

scala - sparkSession.sparkContext对于本地Spark集群为null

security - 保护集群上的 Spark 作业

python - 读取 pandas 数据框时出现 pyspark 类型错误

python - 将 Spark DataFrame 写入 Parquet 时出现 Py4JError

java - 我可以将 RDD<POJO> 转换为 Dataframe,以便将这些 POJO 写入具有与 POJO 相同属性名称的表中吗?

scala - Spark 流 MQTT

apache-spark - 在 Spark 中映射列表的每个元素

apache-spark - 如何访问结构体数组中的值?

apache-spark - 对于 "iterative algorithms,"转换为 RDD 然后返回数据帧的优势是什么