как разрешить набору данных добавлять мою собственную информацию при создании или замене представления в sparksql

Я использую createOrReplaceView для регистрации временного представления в каталоге sparksql, этому методу нужен только один параметр (строковое имя представления), но мне нужно добавить свою собственную информацию, например, в hashMap хранится некоторая информация, которая мне нужна, есть ли хороший способ сделать это?

  1. Я знаю, что могу использовать хэш-карту в своем собственном проекте.

вы можете видеть в исходном коде искры есть метод:

CreateViewCommand(
  name = tableIdentifier,
  userSpecifiedColumns = Nil,
  comment = None,
  properties = Map.empty,
  originalText = None,
  child = logicalPlan,
  allowExisting = false,
  replace = replace,
  viewType = viewType)

но мы не можем передать свойства, даже мы не можем передать информацию описания таблицы


person user2978120    schedule 16.05.2020    source источник


Ответы (1)


Я не уверен насчет варианта использования, но вы можете сделать это с помощью spark sql (без прямого API для добавления свойств таблицы, поэтому вы можете рассматривать это как косвенный способ) -

/**
   * Create or replace a view. This creates a [[CreateViewStatement]]
   *
   * For example:
   * {{{
   *   CREATE [OR REPLACE] [[GLOBAL] TEMPORARY] VIEW [IF NOT EXISTS] multi_part_name
   *   [(column_name [COMMENT column_comment], ...) ]
   *   create_view_clauses
   *
   *   AS SELECT ...;
   *
   *   create_view_clauses (order insensitive):
   *     [COMMENT view_comment]
   *     [TBLPROPERTIES (property_name = property_value, ...)]
   * }}}
   */

посетите здесь для получения дополнительной информации: https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala#L3493

Пример запроса-

 val viewQuery =
      s"""
        | CREATE OR REPLACE TEMPORARY VIEW new_test
        | COMMENT 'this is view comment'
        | TBLPROPERTIES ('creator'='som', 'createdTime'=${System.currentTimeMillis()})
        | AS select * from test
      """.stripMargin

    sqlContext.sql(viewQuery)
person Som    schedule 16.05.2020
comment
мой вариант использования: я создам фрейм данных с помощью sparksession, затем я использую createOrReplaceView, чтобы зарегистрировать представление в каталоге искр. в то же время я хочу сохранить некоторую другую информацию о наборе данных. - person user2978120; 17.05.2020
comment
Привет, вы пробовали команду, упомянутую выше? Я думаю, это решит вашу цель - person Som; 17.05.2020
comment
Привет, ты пробовал ответить? если он работает. пожалуйста, примите и проголосуйте - person Som; 18.05.2020