Spark: напишите метку времени на паркете и прочитайте ее из Hive / Impala - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно написать временную метку в паркет, а затем прочитать ее с помощью Hive и Impala.

Чтобы написать ее, я попытался, например,

my.select(
 ...,
 unix_timestamp() as "myts"
 .write
 .parquet(dir)

Затем, чтобы прочитать, я создалвнешняя таблица в Hive:

CREATE EXTERNAL TABLE IF NOT EXISTS mytable (
  ...
  myts TIMESTAMP
) 

При этом я получаю сообщение об ошибке

HiveException: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritable

Я также пытался заменить unix_timestamp () на

to_utc_timestamp(lit("2018-05-06 20:30:00"), "UTC")

ита же проблема.В Impala он возвращает меня:

 Column type: TIMESTAMP, Parquet schema: optional int64 

В то время как метка времени должна быть int96.Как правильно написать метку времени в паркете?

1 Ответ

0 голосов
/ 14 сентября 2018

Найден обходной путь: UDF, который возвращает объекты java.sql.Timestamp без приведения, затем spark сохранит его как int96.

...