Невозможно просмотреть данные таблиц улья после обновления в спарке

Случай: у меня есть таблица HiveTest, которая представляет собой таблицу ORC, и транзакция установлена ​​в true и загружена в оболочку spark и просмотренные данные.

var rdd= objHiveContext.sql("select * from HiveTest")
rdd.show()

--- Возможность просмотра данных

Теперь я пошел в мою оболочку улья или амбари обновил таблицу, пример

hive> update HiveTest set name='test'   ---Done and success
hive> select * from HiveTest -- able to view updated data

Теперь, когда я могу вернуться к работе и запустить, я не могу просматривать данные, кроме имен столбцов

scala>var rdd1= objHiveContext.sql("select * from HiveTest")
scala> rdd1.show()

- На этот раз печатаются только столбцы, данные не поступают

Проблема 2: Невозможно выполнить обновление из Spark SQL, когда я запускаю scal>objHiveContext.sql("update HiveTest set name='test'"), получая ошибку ниже

org.apache.spark.sql.AnalysisException:
Unsupported language features in query: INSERT INTO HiveTest values(1,'sudhir','Software',1,'IT')
TOK_QUERY 0, 0,17, 0
  TOK_FROM 0, -1,17, 0
    TOK_VIRTUAL_TABLE 0, -1,17, 0
      TOK_VIRTUAL_TABREF 0, -1,-1, 0
        TOK_ANONYMOUS 0, -1,-1, 0
      TOK_VALUES_TABLE 1, 6,17, 28
        TOK_VALUE_ROW 1, 7,17, 28
          1 1, 8,8, 28
          'sudhir' 1, 10,10, 30
          'Software' 1, 12,12, 39
          1 1, 14,14, 50
          'IT' 1, 16,16, 52
  TOK_INSERT 1, 0,-1, 12
    TOK_INSERT_INTO 1, 0,4, 12
      TOK_TAB 1, 4,4, 12
        TOK_TABNAME 1, 4,4, 12
          HiveTest 1, 4,4, 12
    TOK_SELECT 0, -1,-1, 0
      TOK_SELEXPR 0, -1,-1, 0
        TOK_ALLCOLREF 0, -1,-1, 0

scala.NotImplementedError: No parse rules for:
 TOK_VIRTUAL_TABLE 0, -1,17, 0
  TOK_VIRTUAL_TABREF 0, -1,-1, 0
    TOK_ANONYMOUS 0, -1,-1, 0
  TOK_VALUES_TABLE 1, 6,17, 28
    TOK_VALUE_ROW 1, 7,17, 28
      1 1, 8,8, 28
      'sudhir' 1, 10,10, 30
      'Software' 1, 12,12, 39
      1 1, 14,14, 50
      'IT' 1, 16,16, 52

org.apache.spark.sql.hive.HiveQl$.nodeToRelation(HiveQl.scala:1235)

Эта ошибка для вставки в оператор тоже, что и для оператора обновления.

2 ответа

Вы пробовали objHiveContext.refreshTable ("HiveTest")?

Spark SQL активно кэширует данные метастазов Hive.

Если обновление происходит за пределами Spark SQL, вы можете столкнуться с неожиданными результатами, так как версия метастабора Hive в Spark SQL устарела.

Вот еще немного информации:

http://spark.apache.org/docs/latest/sql-programming-guide.html

http://spark.apache.org/docs/latest/api/scala/index.html

В документах в основном упоминается Parquet, но это, вероятно, относится к ORC и другим форматам файлов.

Например, в JSON, если вы добавляете новые файлы в каталог вне Spark SQL, вам нужно вызвать hiveContext.refreshTable() в Spark SQL, чтобы увидеть новые данные.

sparksql не имеет обновлений и удаленных транзакций, включенных до сих пор. Однако вставить еще можно сделать.

Другие вопросы по тегам