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

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

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)

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


person sudhir    schedule 07.01.2016    source источник


Ответы (2)


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

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

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

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

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

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.hive.HiveContext

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

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

person Chris Fregly    schedule 08.01.2016
comment
да, эта проблема решена после обновления, можете ли вы взглянуть на второй упомянутый - person sudhir; 09.01.2016

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

person Tutu Kumari    schedule 11.10.2018