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 2.0 将 json 读入带有引号的数据帧中 - 与 spark 1.6 不同的行为......错误?
当我迭代地重复使用旧的缓存数据时,Spark Dataframe突然变得非常慢