SQLContext в Spark2 не получает обновленные записи таблицы улья - PullRequest
0 голосов
/ 16 января 2019

У меня есть работающее приложение, которое запрашивает таблицу кустов, используя 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

1 Ответ

0 голосов
/ 16 января 2019

Try sqlContext.refreshTable("my_table")

в искре 2.x spark.catalog.refreshTable("my_table")

в формате SQL spark.sql("refresh table my_table")

...