У меня есть работающее приложение, которое запрашивает таблицу кустов, используя HiveContext, и оно работает нормально, если я запускаю приложение, используя spark-submit в spark1.6. В рамках обновления мы перешли на spark2.1 и использовали spark2-submit. Поскольку spark2 не поддерживает HiveContext, вместо этого я использую SQLContext. Проблема, с которой я сталкиваюсь, заключается в том, что как только я запускаю контекст, любые инкрементные изменения в таблице кустов не видны в результатах запроса куста. Я запускаю SparkContext с помощью enableHiveSupport (). Если я остановлю и перезапущу приложение, я смогу увидеть строки. Приложение, пишущее данные, выполняет 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, так как я никогда не делал этого в spark1.6, когда я выполняю запрос с использованием HiveContext и SQLContext должен вести себя так же, как HiveContext