Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花&x27;数据集非持久性行为_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 火花&x27;数据集非持久性行为

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(); //

最近我看到了Spark的一些奇怪行为

在我的应用程序中有一个管道,我在其中操作一个大数据集-伪代码:

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中的存储选项卡。另外,我看到数据集被重新计算了。我想我看到了一些问题,但我不确定——谢谢!这是有道理的。正如票证中提到的,解决方法是执行一些额外的步骤:或者等待物化视图。谢谢:)