Spark 2.0+ 即使数据帧被缓存,如果它的源之一发生变化,它会重新计算吗?

Posted

技术标签:

【中文标题】Spark 2.0+ 即使数据帧被缓存,如果它的源之一发生变化,它会重新计算吗?【英文标题】:Spark 2.0+ Even the dataframe is cached, if one of its source changes, it would recompute? 【发布时间】:2019-05-19 02:18:17 【问题描述】:

这是我的用例。

    有多个来源 df1 到 df4,df3 代表一个现有的 hive 表 构建一个从 df1 到 df4 的 df5 将 df5 插入/附加到该现有配置单元表。 将 df5 保存到其他位置。

问题是第 4 步没有保存任何内容。 这是否意味着在第 3 步之后, df3 会改变? 我已经为 df1 到 df5 使用了 cache()。但看起来如果源已更改,df5 会重新计算 我检查了 Spark Web UI 存储。所有数据帧都 100% 缓存。

【问题讨论】:

【参考方案1】:

一般来说,您不应该在任何一个方向上都依赖这种行为。 Spark 中没有可以跟踪任意数据源更改的机制,因此获取更改通常是相当偶然的,不能被视为理所当然。

同时 Spark 可以选择在许多不同的场景中重新计算。

在某些情况下,Spark 还可以检测更改(通常是从文件加载数据时)并抛出异常。

【讨论】:

以上是关于Spark 2.0+ 即使数据帧被缓存,如果它的源之一发生变化,它会重新计算吗?的主要内容,如果未能解决你的问题,请参考以下文章

Spark缓存RDD而不被要求

Spark Dataframe 为浮点数提供不同级别的精度

Spark 2.0 将 json 读入带有引号的数据帧中 - 与 spark 1.6 不同的行为......错误?

当我迭代地重复使用旧的缓存数据时,Spark Dataframe突然变得非常慢

如果我们缓存一个DataSet,然后将同一个DataSet缓存为一张表,Spark会缓存两次数据吗

Spark 1.6 数据帧缓存无法正常工作