我试图理解火花缓存/持久化机制的好处。
AFAIK,火花总是坚持RDDs后,洗牌作为一个优化。那么,缓存/持久化调用提供了哪些好处?我假设缓存/持久化发生在内存中,所以唯一的好处是它不会从磁盘读取,对吗?
发布于 2022-09-09 18:56:31
有两个不同之处
在洗牌期间,
)
发布于 2022-09-11 02:25:09
是延迟评估的,如果您做了类似的事情
val a = df1.join(df2)
val b = a.groupBy(col).agg(...)
a.write.parquet(...)
b.write.parquet(...)
然后扫描df1
和df2
并加入两次,每次write
操作一次。
也就是说,除非您缓存或持久化它们。
对于洗牌的持久性完全是另一回事,它处理的是洗牌操作的内部--而不是影响您在应用层看到的东西。
发布于 2022-09-10 12:49:50
缓存/持久化调用提供了什么好处?
我马上想到的一个例子是火花读取过程,如果您从文件系统读取一些数据,并且对它执行两组不同的转换(以及最后的操作),您将加载两次源数据(您可以检查您的UI,您将看到两个加载),但是如果您缓存它,加载过程只会发生一次。
缓存/持久化发生在内存中,因此唯一的好处是它不会从磁盘读取
不,缓存和持久化发生在不同的级别上,内存是默认级别:请在这里查看:https://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence
https://stackoverflow.com/questions/73663455
复制相似问题