gan*_*til 6 apache-spark apache-spark-sql
我对 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()
Run Code Online (Sandbox Code Playgroud)
那么我是否需要缓存数据帧 A 以增强性能?
提前致谢。
是的,你是对的。
您应该缓存 A,因为它用于 B 和 C 作为输入。DAG 可视化将显示重用或返回源的程度(在本例中)。如果您有一个嘈杂的集群,则可能会发生一些溢出到磁盘的情况。
另请参阅此处的最佳答案(为什么)我们需要调用缓存还是保留在 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
Run Code Online (Sandbox Code Playgroud)
使用 .cache 查看 UI
并且没有.cache
QED:那么,.cache 有好处。否则就没有意义。此外,在某些情况下,两次读取可能会导致不同的结果。
归档时间: |
|
查看次数: |
1584 次 |
最近记录: |