Внешняя таблица пуста при сохранении данных ORC - PullRequest
0 голосов
/ 25 января 2019

Я хочу записать данные 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()

1 Ответ

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

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

Для второго случая. Если вы попытаетесь загрузить orc из 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()
...