Apache spark 火花&x27;数据集非持久性行为
最近我看到了Spark的一些奇怪行为 在我的应用程序中有一个管道,我在其中操作一个大数据集-伪代码:Apache spark 火花&x27;数据集非持久性行为,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,最近我看到了Spark的一些奇怪行为 在我的应用程序中有一个管道,我在其中操作一个大数据集-伪代码: val data=spark.read(…) join(df1,“key”)//等等,更多转换 data.cache();//用于保存后不重新计算数据 data.write.parquet()//一些保存 val extension=data.join(..)//更多转换-连接、选择等。 extension.cache();//同样,缓存不能重复计算 extension.count(); //
val data=spark.read(…)
join(df1,“key”)//等等,更多转换
data.cache();//用于保存后不重新计算数据
data.write.parquet()//一些保存
val extension=data.join(..)//更多转换-连接、选择等。
extension.cache();//同样,缓存不能重复计算
extension.count();
// (1)
extension.write.csv()//其他一些保存
extension.groupBy(“key”).agg(一些聚合)//
extension.write.parquet()//其他保存,如果没有缓存,将触发整个数据集的重新计算
但是,当我调用data.unpersist()
即就地(1)
,Spark会从存储器中删除所有数据集,以及扩展名数据集,该数据集不是我试图取消持久化的数据集
这是预期的行为吗?如何通过unpersist
在旧数据集上释放一些内存,而不取消“链中下一个”的所有数据集的持久性
我的设置:
- Spark版本:当前主版本,适用于2.3的RC
- 斯卡拉:2.11
- Java:OpenJDK1.8
这个问题看起来很像,但在这里我在取消持久化之前做了一些操作。首先,我要计算所有内容,然后保存到存储中—我不知道缓存在RDD中是否与在数据集中一样工作这是spark缓存的预期行为。Spark不想保留无效的缓存数据。它将完全删除引用数据集的所有缓存计划
这是为了确保查询是正确的。在本例中,您正在从缓存的数据集数据
创建扩展数据集
。现在,如果数据集data
未持久化,则扩展数据集将不再依赖缓存的数据集data
是他们所做修复的拉动请求。您可以看到Spark 2.4的类似答案:
关于数据集和缓存行为的正确性有一个问题,请参阅
根据Maryann Xue的描述,现在缓存将以以下方式工作:
拖放表和常规(持久)视图:常规模式
拖放临时视图:非级联模式
修改表内容(插入/更新/合并/删除):常规模式
调用DataSet.unpersist():非级联模式
调用Catalog.uncacheTable():遵循与drop tables/view相同的约定,即临时视图使用非级联模式,其余视图使用常规模式
其中“常规模式”表示问题中的mdoe,@Avishek的答案和非级联模式表示,扩展将不会被取消持久化@raam86我正在检查Spark UI中的存储选项卡。另外,我看到数据集被重新计算了。我想我看到了一些问题,但我不确定——谢谢!这是有道理的。正如票证中提到的,解决方法是执行一些额外的步骤:或者等待物化视图。谢谢:)