Внешняя таблица пуста при сохранении данных ORC

Я хочу записать данные ORC во внешнюю таблицу Hive из фрейма данных Spark. Когда я сохраняю фрейм данных в виде таблицы, данные отправляются в существующую внешнюю таблицу, однако, когда я пытаюсь сохранить данные в формате ORC в каталог, а затем прочитать эти данные из внешней таблицы, они не отображаются.

Что может быть причиной отсутствия данных во втором случае?

Как это работает:

val dataDir = "/tmp/avro_data"
sql("CREATE EXTERNAL TABLE avro_random(name string, age int, phone string, city string, country string) STORED AS ORC LOCATION '$dataDir'")

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .saveAsTable("avro_random")

sql("SELECT * FROM avro_random").show()

Код, который возвращает пустую внешнюю таблицу:

val dataDir = "/tmp/avro_data"
sql("CREATE EXTERNAL TABLE avro_random(name string, age int, phone string, city string, country string) STORED AS ORC LOCATION '$dataDir'")

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .orc(dataDir)

sql("SELECT * FROM avro_random").show()

person Cassie    schedule 25.01.2019    source источник


Ответы (1)


Только saveAsTable будет работать с Hive. Если вы используете .orc(dataDir), искра запишет orc в dataDir без поддержки Hive.

Для второго случая. Если попробовать загрузить орка из dataDir по искре, то сработает

dataframe
  .write
  .mode(SaveMode.Overwrite)
  .orc(dataDir)

// New code is below
val newDf = spark.read.orc(dataDir)
newDf.createOrReplaceTempView("avro_random_orc") // Register TMP table instead to support sql

sql("SELECT * FROM avro_random_orc").show()
person Duy Nguyen Hoang    schedule 25.01.2019