Spark2中的SQLContext无法获取更新的配置单元表记录

时间:2019-01-16 05:23:19

标签: apache-spark hive apache-spark-sql

我有一个正在运行的应用程序,该应用程序使用HiveContext查询蜂巢表,如果我在spark1.6中使用spark-submit运行该应用程序,则它可以正常工作。作为升级的一部分,我们切换到spark2.1并使用spark2-submit。由于spark2不支持HiveContext,所以我改为使用SQLContext。我面临的问题是,一旦启动上下文,在hive查询结果中就看不到hive表中的任何增量更改。我正在使用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行。

如果我做一个刷新表,即

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相同

1 个答案:

答案 0 :(得分:0)

尝试     sqlContext.refreshTable("my_table")

在spark 2.x spark.catalog.refreshTable("my_table")

SQL格式spark.sql("refresh table my_table")