apache-spark - Spark2 中的 SQLContext 没有获取更新的配置单元表记录
问题描述
我有一个正在运行的应用程序,它使用 HiveContext 查询配置单元表,如果我在 spark1.6 中使用 spark-submit 运行应用程序,它工作正常。作为升级的一部分,我们切换到 spark2.1 并使用 spark2-submit。由于 spark2 不支持 HiveContext,而是使用 SQLContext。我面临的问题是,一旦我启动上下文,配置单元表中的任何增量更改在配置单元查询结果中都不可见。我正在使用 enableHiveSupport() 启动 SparkContext。如果我停止并重新启动应用程序,我可以看到这些行。写入数据的应用程序在写入后正在执行 MSCK REPAIR TABLE,所以我不确定我缺少什么。
这是代码片段
val spark= SparkSession.builder().enableHiveSupport().getOrCreate()
val sqlc=spark.sqlContext
sqlc.sql("select * from table1").show(false)
+---+----------+----+
| id| hire_dt|user|
+---+----------+----+
|1.0|2018-01-01|John|
|2.0|2018-12-01|Adam|
+---+----------+----+
现在在另一个会话中,我添加了新行,但如果我运行上面的代码,它仍然只返回 2 行。
如果我做一个刷新表,这很好用,即
val spark= SparkSession.builder().enableHiveSupport().getOrCreate()
val sqlc=spark.sqlContext
sqlc.sql("refresh table table1")
sqlc.sql("select * from table1").show(false)
我的问题是为什么我应该做一个 refeshTable,因为当我使用 HiveContext 查询时我从未在 spark1.6 中这样做过,并且 SQLContext 的行为方式应该与 HiveContext 相同
解决方案
尝试
sqlContext.refreshTable("my_table")
在火花 2.xspark.catalog.refreshTable("my_table")
SQL 格式spark.sql("refresh table my_table")
推荐阅读
- android - 如何在 View.OnClickListener(kotlin, android) 中使用属性
- excel - 捕获枢轴过滤器和退出函数的错误
- python - 用于分类的矩形切割优化
- javascript - 使用正则表达式捕获字符串的第一个字符,同时忽略“the”和“a”
- azure - 使用 Application Insight 代理 (v3) 和 Java spring boot 应用程序跨跟踪调用传递自定义标头/字段
- linux - 错误错误:“未找到符号‘grub_calloc’
- arrays - 在 Swift 中将值存储在 Array Int 中
- jquery - 如何获取下拉列表以从数据库nodejs输出数组
- sql - 如何汇总非工作日期的数据?
- mqtt - 将数据从 AWS Greengrass 发送到 AWS 云时的资源消耗