2014-09-23 2 views
0

Я пытаюсь сохранить txt-файл с двумя столбцами даты и времени соответственно. Что-то вроде этого: 1999-01-01 12:08:56Хранение даты и времени в PIG

Теперь я хочу, чтобы выполнить некоторые операции, дату, используя PIG, но я хочу, чтобы сохранить дату и время, как это 1999-01-01T12: 08: 56 (я проверил эту ссылку): http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

то, что я хочу знать, что какой формат можно использовать, в котором моя дата и время находятся в одном столбце, так что я могу кормить его PIG, а затем как загрузить эту дату в свинью. Я знаю, что мы меняем его на datetime, но показываем ошибки. Может кто-нибудь любезно рассказать мне, как загрузить Date & Данные времени вместе. Примером может служить большая помощь.

+0

Я ничего не знаю о Apache PIG. Но если ваш вопрос заключается в том, как взять строку, представляющую дату и строку, представляющую время суток, объедините их в строку, которая будет анализироваться как значение даты (объекта), возможно, отрегулируйте это значение на другое часовой пояс, такой как UTC, а затем сериализуйте это значение для строки в другом формате, чтобы представить комбинированное значение даты-времени ... ну, это было рассмотрено, по меньшей мере, в тысячах вопросов и ответов на StackOverflow. И я просто дал вам ключевые слова, которые вам нужно искать, наряду с «joda» и «java.time». –

+0

Возможный дубликат [Строка даты синтаксического анализа для некоторого Java-объекта] (http://stackoverflow.com/questions/8854780/parse-date-string-to-some-java-object) –

ответ

2

Пожалуйста, дайте мне знать, если это сработает для вас.

input.txt 
1999-01-01 12:08:56 
1999-01-02 12:08:57 
1999-01-03 12:08:58 
1999-01-04 12:08:59 

PigScript: 
A = LOAD 'input.txt' using PigStorage(' ') as(date:chararray,time:chararray); 
B = FOREACH A GENERATE CONCAT(date,'T',time) as myDateString; 
C = FOREACH B GENERATE ToDate(myDateString); 
dump C; 

Output: 
(1999-01-01T12:08:56.000+05:30) 
(1999-01-02T12:08:57.000+05:30) 
(1999-01-03T12:08:58.000+05:30) 
(1999-01-04T12:08:59.000+05:30) 

Now the myDateString is in date object, you can process this data using all the build in date functions. 

Incase if you want to store the output as in this format 
(1999-01-01T12:08:56) 
(1999-01-02T12:08:57) 
(1999-01-03T12:08:58) 
(1999-01-04T12:08:59) 

you can use REGEX_EXTRACT to parse the each data till "." something like this 

D = FOREACH C GENERATE ToString($0) as temp; 
E = FOREACH D GENERATE REGEX_EXTRACT(temp, '(.*)\\.(.*)', 1); 
dump E; 

Output: 
(1999-01-01T12:08:56) 
(1999-01-02T12:08:57) 
(1999-01-03T12:08:58) 
(1999-01-04T12:08:59) 
+0

Привет .... когда я использую Функция ToDate Я получаю вывод: (1999-01-01T12: 08: 56.000-08: 00) (2011-03-19T19: 07: 43.000-07: 00) (2008-09-25T21: 08: 31 000-07: 00) (2014-11-30T11: 11: 21.000-08: 00) (1978-12-13T20: 32: 31.000-08: 00) (2010-11-21T17: 33: 34.000- 08:00) (2010-10-24T22: 34: 43.000-07: 00) (2007-09-27T18: 21: 44.000-07: 00) Можете ли вы сказать мне, почему я не получаю +05: 30 в моем выпуске? Как я могу изменить часовой пояс? Также еще одна вещь, когда у меня есть данные после использования REGEX: (1999-01-01T12: 08: 56) (1999-01-02T12: 08: 57) Могу ли я использовать всю свою дату временные функции для этих извлеченных данных? – CodeReaper

+1

Привет .... ToString ($ 0) не работает. Это бросает эту ошибку: grunt> D = FOREACH C GENERATE ToString ($ 0) как temp; 2014-09-23 21: 09: 24,305 [main] ERROR org.apache.pig.tools.grunt.Grunt - ОШИБКА 1045: <строка 19, столбец 23> Не удалось вывести функцию соответствия для org.apache.pig .builtin.ToString как несколько или ни один из них не подходит. Пожалуйста, используйте явное приведение. – CodeReaper

Смежные вопросы