apache-spark - 截断表后刷新的缓存数据帧
问题描述
以下是步骤:
scala> val df = sql("select * from table")
df: org.apache.spark.sql.DataFrame = [num: int]
scala> df.cache
res13: df.type = [num: int]
scala> df.collect
res14: Array[org.apache.spark.sql.Row] = Array([10], [10])
scala> df
res15: org.apache.spark.sql.DataFrame = [num: int]
scala> df.show
+---+
|num|
+---+
| 10|
| 10|
+---+
scala> sql("truncate table table")
res17: org.apache.spark.sql.DataFrame = []
scala> df.show
+---+
|num|
+---+
+---+
我的问题是为什么 df 被刷新?我的期望是它应该被缓存在内存中并且截断不应该删除数据。
任何想法将不胜感激。
谢谢
解决方案
你永远不应该依赖cache
正确性。Spark是性能优化的,即使是cache
最防御性的StorageLevel
(MEMORY_AND_DISK_SER_2
与您的问题中使用的代码类似的代码可能在某些情况下有效,但不要假设它是有保证的或确定性的行为。
推荐阅读
- go - 配置 Keycloak 以在 id 令牌中包含 at_hash 声明
- php - HTML BootStrap 登录表单发布方法不起作用 [URL 中没有参数]
- javascript - 嵌入在 html5 中的 javascript 按 ID 对输入值求和以进行单选 - 检查验证
- oracle - 涉及两个表的触发器
- acumatica - 通过导入方案从网格上传数据
- ngfor - 如何在 NgIf 语句中遍历数组 - Angular / Ionic
- java - 将 Gatling Frontline 与已编译代码一起使用时,如何避免 java.lang.reflect.InvocationTargetException?
- ansible - Ansible:如何复制 4 个命令的输出
- xml - 使用 Xslt 从 XML 中删除重复项
- angular - fromEvent 抛出 TypeError:Angular 测试中的事件目标无效