spark2中的sqlcontext未获得更新的配置单元表记录

ar5n3qh5  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(387)

我有一个正在运行的应用程序,它使用hivecontext查询配置单元表,如果我在spark1.6中使用spark submit运行该应用程序,它可以正常工作。作为升级的一部分,我们切换到spark2.1并使用spark2 submit。因为spark2不支持hivecontext,所以我改用sqlcontext。我面临的问题是,一旦启动上下文,配置单元表中的任何增量更改都不会在配置单元查询结果中显示。我正在用enablehivesupport()启动sparkcontext。如果我停止并重新启动应用程序,我可以看到行。写入数据的应用程序在写入后正在执行msck修复表,因此我不确定缺少了什么。
这是代码片段

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行。
如果我做一个刷新表ie,这个很好用

val spark= SparkSession.builder().enableHiveSupport().getOrCreate()
val sqlc=spark.sqlContext
sqlc.sql("refresh table table1")
sqlc.sql("select * from table1").show(false)

我的问题是,既然我在spark1.6中使用hivecontext进行查询时从未执行过refeshtable,而sqlcontext的行为应该与hivecontext相同,那么为什么要执行refeshtable呢

o4tp2gmn

o4tp2gmn1#

尝试 sqlContext.refreshTable("my_table") 在spark 2.x中 spark.catalog.refreshTable("my_table") sql格式 spark.sql("refresh table my_table")

相关问题