我运行了一个简单的 Spark-sql 程序,使用 Spark-SQL 将数据从 Hive 获取到 Spark 会话。
scala> spark.sql("select count(1) from firsthivestreamtable").show(100,false)
+--------+
|count(1)|
+--------+
|36 |
+--------+
Run Code Online (Sandbox Code Playgroud)
Ran insert 语句在 Hive 表中插入 9 条新记录(直接在 Hive 控制台上)。验证 Hive 表是否已正确插入其他行。
hive> select count(1) aa from firsthivestreamtable;
Total MapReduce CPU Time Spent: 4 seconds 520 msec
OK
45
Time taken: 22.173 seconds, Fetched: 1 row(s)
hive>
Run Code Online (Sandbox Code Playgroud)
但是已经打开的 Spark 会话不显示新插入的 9 行。因此,当我在 Spark 会话中进行计数时,它仍然显示 36 行。为什么会发生这种情况?
scala> spark.sql("select count(1) from firsthivestreamtable").show(100,false)
+--------+
|count(1)|
+--------+
|36 |
+--------+
Run Code Online (Sandbox Code Playgroud)
需要在 Spark 会话中执行哪些操作才能将刷新的(新)数据获取到会话中?由于已插入新数据,Hive 表中的实际行数现在为 45,而不是 36。
它位于 Spark shell 中,Hive 中的表通过 Spark 结构化流 API 加载。
当 Spark 第一次从元存储中检索表时,它会列出文件并将其缓存在内存中。
当我们执行insert操作时,记录会进入Spark 无法识别的新文件中。两个选择。
1. 触发REFRESH TABLE <tblname>-> spark.sql("REFRESH TABLE firsthivestreamtable")。
2. 重新启动Spark应用程序(将再次获取表及其文件)
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |