Улей не определяет формат метки времени

У меня есть сценарий PIG, который

  • Загружает и преобразует данные из CSV
  • Заменяет некоторых персонажей

Вызывает java-программу (JAR) для преобразования даты и времени в csv с 06.02.2015 18:52 до 2015-6-2 18:52 (мм / дд / гггг в гггг-мм-дд)

REGISTER /home/cloudera/DateTime.jar;

A = Load '/user/cloudera/Data.csv' using PigStorage(',') as (ac,datetime,amt,trace);

B = FOREACH A GENERATE ac, REPLACE(datetime, '\\/','-') as newdate,REPLACE(amt,'-','') as newamt,trace;

C = FOREACH B GENERATE ac,Converter.DateTime(newdate) as ConvDate,ConvAmt,trace;

Store C into '/user/cloudera/Output/' using PigStorage('\t');

Пример ввода - 21467245 02.06.2015 18:52 -9,59 518

Пример вывода - 21467245 2015-6-2 18:52 9,59 518

Я загружаю выходные данные в куст, другие поля кажутся нормальными во время импорта, но поле даты и времени приводит к нулю, если загружено как временная метка, и остается нетронутым, когда его строка.

Где все идет не так?

Я использую Cloudera CDH 5


person Santosh Sulibhavi    schedule 25.06.2015    source источник
comment
в pig есть встроенная функция ToDate().   -  person gobrewers14    schedule 25.06.2015
comment
@ GoBrewers14 - изменяет ли он выходной формат с pig, чтобы Hive мог принимать его как временную метку?   -  person Santosh Sulibhavi    schedule 25.06.2015
comment
@ GoBrewers14 ToDate (newdate, 'MM-dd-yyyy HH: mm') дает 2015-06-02T18: 52: 00.000Z Улей по-прежнему не принимает этот формат, поскольку в качестве метки времени требуется гггг-мм-дд.   -  person Santosh Sulibhavi    schedule 25.06.2015
comment
если вам нужен yyyy-MM-dd, тогда зачем вам указывать yyyy-MM-dd HH:mm в функции ToDate()? просто положите yyyy-MM-dd   -  person gobrewers14    schedule 25.06.2015
comment
@ GoBrewers14 ToDate (newdate, 'yyyy-MM-dd HH: mm') выдает ошибку, я пробовал перед тем, как поставить перед комментарием. Ошибка серверной части: org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключение при выполнении [POUserFunc (Имя: POUserFunc (org.apache.pig.builtin.ToDate2ARGS) [datetime] - scope-38 Ключ оператора: scope- 38) children: null at []]: java.lang.IllegalArgumentException: недопустимый формат: 06-02-2015 18:52 неверно сформирован в 15 18:52 Насколько мне известно, Hive может принимать yyyy-MM-dd HH: mm формат, если включает время, это то, что я пытаюсь достичь   -  person Santosh Sulibhavi    schedule 25.06.2015


Ответы (1)


Из документов улья:

Метки времени в текстовых файлах должны использовать формат гггг-мм-дд чч: мм: сс [.f ...]. Если они находятся в другом формате, объявите их как соответствующий тип (INT, FLOAT, STRING и т. Д.) И используйте UDF для преобразования их в отметки времени.

Поэтому вам нужно либо изменить свой Converter для вывода этого формата, либо использовать UDF --- или просто сохранить их как строки, что я обычно делаю!

person maxymoo    schedule 26.06.2015
comment
Когда они были импортированы в улей, мне нужно выполнить целую кучу операций, таких как определение того, утро сейчас или вечер, количество учетных записей за определенный период времени и многое другое. Думаю, я не смогу этого сделать, если он в строковом формате. Не могли бы вы помочь мне с этим? - person Santosh Sulibhavi; 26.06.2015