TIMESTAMP не работает, как предполагалось с паркетом в улье - PullRequest
1 голос
/ 02 марта 2020

У меня есть parquet данные, которые при чтении (столбец TIMESTAMP) с использованием spark отлично работают. Ниже приведены примеры записей:

scala> data.select($"BATCH_LOAD_DATE").limit(5).show()

+-------------------+
|    BATCH_LOAD_DATE|
+-------------------+
|2020-02-21 07:35:27|
|2020-02-21 07:35:27|
|2020-02-21 07:35:27|
|2020-02-21 07:35:27|
|2020-02-21 07:35:27|
+-------------------+   

Я проверил схему, и она показывает TIMESTAMP в качестве типа данных для одного из столбцов, который является правильным. Так что никаких проблем со схемой тоже нет. Однако, когда я пытаюсь прочитать тот же столбец TIMESTAMP через Hive, он выдает ниже исключения

Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.hive.serde2.io.TimestampWritableV2 (state=,code=0)   

По ссылке этой я вижу, что это открытая проблема в Hive , Не уверен, решен ли он еще или нет. Есть ли обходной путь для этого? Что-то, что можно сделать при загрузке данных или какое-то преобразование после загрузки?

1 Ответ

0 голосов
/ 03 марта 2020

Я нашел альтернативу моей собственной проблеме. Я изменил тип столбца TIMESTAMP столбец на STRING и во время извлечения данных я использовал метод from_unixtime, чтобы привести конкретный столбец к нужному формату даты и смог его извлечь.
Но проблема здесь было, если мое значение даты 2020-02-27 15:40:22 и когда я извлекал данные этого столбца через Hive, он возвращал EpochSeconds т.е. 15340232000000.
Итак, я решил эту проблему в Hive с помощью запроса ниже:

select *, from_unixtime(cast(SOURCE_LOAD_DATE as BIGINT) DIV 1000000) as SOURCE_LOAD_DATE from table_name;   

Используя вышеупомянутый запрос, я смог получить правильную дату со значением метки времени.

Примечание : Вам нужно будет привести все столбцы, в которых есть метки времени.

Это единственный трюк, о котором я мог подумать. Я надеюсь, что это может помочь вам или другим!

...