T. *_*ęda 10 apache-spark apache-spark-sql
最近我看到了Spark的一些奇怪行为.
我在我的应用程序中有一个管道,我正在操作一个大数据集 - 伪代码:
val data = spark.read (...)
data.join(df1, "key") //etc, more transformations
data.cache(); // used to not recalculate data after save
data.write.parquet() // some save
val extension = data.join (..) // more transformations - joins, selects, etc.
extension.cache(); // again, cache to not double calculations
extension.count();
// (1)
extension.write.csv() // some other save
extension.groupBy("key").agg(some aggregations) //
extension.write.parquet() // other save, without cache it will trigger recomputation of whole dataset
Run Code Online (Sandbox Code Playgroud)
但是当我调用data.unpersist()ie时(1),Spark会从存储中删除所有数据集,也就是extension数据集,它不是我试图取消的数据集.
这是预期的行为吗?如何unpersist在不使用"链接下一个"的所有数据集的情况下,通过旧数据集释放一些内存?
我的设置:
问题看起来类似于理解Spark的缓存,但在这里我在unpersist之前做了一些动作.起初我计算所有内容然后保存到存储中 - 我不知道缓存在RDD中是否与数据集中的相同
Spark 2.4 的答案:
有一张关于数据集和缓存行为正确性的票,请参阅https://issues.apache.org/jira/browse/SPARK-24596
根据 Maryann Xue 的描述,现在缓存将按以下方式工作:
其中“常规模式”是指问题中的 mdoe,@Avishek 的回答和非级联模式意味着,这extension不会是不持久的
| 归档时间: |
|
| 查看次数: |
2846 次 |
| 最近记录: |