Отметка времени Афины / Улья в файлах паркета, написанных искрой - PullRequest
0 голосов
/ 06 июня 2018

Мы пишем файлы из спарк и читаем из Афины / Улья.У нас возникла проблема с отметкой времени при использовании улья.

 scala> val someDF = Seq((8, "2018-06-06 11:42:43")).toDF("number", "word")
someDF: org.apache.spark.sql.DataFrame = [number: int, word: string]

scala> someDF.coalesce(1).write.mode("overwrite").option("delimiter", "\u0001").save("s3://test/")

При этом создается файл паркета, и я создал таблицу

CREATE EXTERNAL TABLE `test5`(
  `number` int, 
  `word` timestamp)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\u0001' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://test/'

Выбор запроса Сбой с проблемой: HIVE_BAD_DATA: Тип слова поля BINARY в паркете несовместим с меткой времени типа, определенной в таблице.схема

То же самое работает при тестировании с простым CSV-файлом.

scala>someDF.coalesce(1).write.format("com.databricks.spark.csv").mode("overwrite").option("delimiter", "\u0001").save("s3://test")

Table:
CREATE EXTERNAL TABLE `test7`(
  `number` int, 
  `word` timestamp)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\u0001' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://test/'

Не могли бы вы помочь с тем, что идет не так, когда мы пишем его в виде файла партера.

1 Ответ

0 голосов
/ 06 июня 2018

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

...