Apache pig 使用Pig将可读字符串日期转换为日期?

Apache pig 使用Pig将可读字符串日期转换为日期?,apache-pig,Apache Pig,我将以下人类可读的日期格式存储在文本文件中: Wed Oct 15 09:26:09 BST 2014 Wed Oct 15 19:26:09 BST 2014 Wed Oct 18 08:26:09 BST 2014 Wed Oct 23 10:26:09 BST 2014 Sun Oct 05 09:26:09 BST 2014 Wed Nov 20 19:26:09 BST 2014 如何使用转换日期以使其与Pig的ToDate()函数兼容,在该函数中,我可以使用GetHour()、Ge

我将以下人类可读的日期格式存储在文本文件中:

Wed Oct 15 09:26:09 BST 2014
Wed Oct 15 19:26:09 BST 2014
Wed Oct 18 08:26:09 BST 2014
Wed Oct 23 10:26:09 BST 2014
Sun Oct 05 09:26:09 BST 2014
Wed Nov 20 19:26:09 BST 2014

如何使用转换日期以使其与Pig的ToDate()函数兼容,在该函数中,我可以使用GetHour()、GetYear()、GetDay()和GetMonth()将日期范围约束和逻辑应用于我的查询?

1。Pig只支持几种日期格式,因此您需要根据以下格式之一转换日期和时间。

2.您的输入将BST作为时区,但不支持在pig BST中,因此您需要选择与BST等效的其他时区。
这里有时区

示例:

  • 我选择的时间格式为“EEE,d MMM yyyy HH:mm:ss Z”Wed,2001年7月4日12:08:56”,bcoz这在某种程度上与您的输入数据相匹配
  • 英国夏令时时区不可用,所以我选择“GMT”作为时区,您可以根据需要更改
  • input.txt

    Wed Oct 15 09:26:09 BST 2014
    Wed Oct 15 19:26:09 BST 2014
    Wed Oct 18 08:26:09 BST 2014
    Wed Oct 23 10:26:09 BST 2014
    Sun Oct 05 09:26:09 BST 2014
    Wed Nov 20 19:26:09 BST 2014
    
    PigScript:

    A = LOAD 'input.txt' USING PigStorage(' ') AS(day:chararray,month:chararray,date:chararray,time:chararray,tzone:chararray,year:chararray);
    B = FOREACH A GENERATE CONCAT(CONCAT(CONCAT(CONCAT(day,', ',date),' ',month),' ',year),' ',time) AS mytime;
    C = FOREACH B GENERATE ToDate(mytime,'EEE, d MMM yyyy HH:mm:ss','GMT') AS newTime;
    D = FOREACH C GENERATE GetMonth(newTime),GetDay(newTime),GetYear(newTime),GetHour(newTime),GetMinute(newTime);
    DUMP D;
    
    (10,15,2014,9,26)
    (10,15,2014,19,26)
    (10,15,2014,8,26)
    (10,22,2014,10,26)
    (10,5,2014,9,26)
    (11,19,2014,19,26)
    
    输出:

    A = LOAD 'input.txt' USING PigStorage(' ') AS(day:chararray,month:chararray,date:chararray,time:chararray,tzone:chararray,year:chararray);
    B = FOREACH A GENERATE CONCAT(CONCAT(CONCAT(CONCAT(day,', ',date),' ',month),' ',year),' ',time) AS mytime;
    C = FOREACH B GENERATE ToDate(mytime,'EEE, d MMM yyyy HH:mm:ss','GMT') AS newTime;
    D = FOREACH C GENERATE GetMonth(newTime),GetDay(newTime),GetYear(newTime),GetHour(newTime),GetMinute(newTime);
    DUMP D;
    
    (10,15,2014,9,26)
    (10,15,2014,19,26)
    (10,15,2014,8,26)
    (10,22,2014,10,26)
    (10,5,2014,9,26)
    (11,19,2014,19,26)
    

    1.Pig只支持几种日期格式,因此您需要根据以下格式之一转换日期和时间。

    2.您的输入将BST作为时区,但不支持在pig BST中,因此您需要选择与BST等效的其他时区。
    这里有时区

    示例:

  • 我选择的时间格式为“EEE,d MMM yyyy HH:mm:ss Z”Wed,2001年7月4日12:08:56”,bcoz这在某种程度上与您的输入数据相匹配
  • 英国夏令时时区不可用,所以我选择“GMT”作为时区,您可以根据需要更改
  • input.txt

    Wed Oct 15 09:26:09 BST 2014
    Wed Oct 15 19:26:09 BST 2014
    Wed Oct 18 08:26:09 BST 2014
    Wed Oct 23 10:26:09 BST 2014
    Sun Oct 05 09:26:09 BST 2014
    Wed Nov 20 19:26:09 BST 2014
    
    PigScript:

    A = LOAD 'input.txt' USING PigStorage(' ') AS(day:chararray,month:chararray,date:chararray,time:chararray,tzone:chararray,year:chararray);
    B = FOREACH A GENERATE CONCAT(CONCAT(CONCAT(CONCAT(day,', ',date),' ',month),' ',year),' ',time) AS mytime;
    C = FOREACH B GENERATE ToDate(mytime,'EEE, d MMM yyyy HH:mm:ss','GMT') AS newTime;
    D = FOREACH C GENERATE GetMonth(newTime),GetDay(newTime),GetYear(newTime),GetHour(newTime),GetMinute(newTime);
    DUMP D;
    
    (10,15,2014,9,26)
    (10,15,2014,19,26)
    (10,15,2014,8,26)
    (10,22,2014,10,26)
    (10,5,2014,9,26)
    (11,19,2014,19,26)
    
    输出:

    A = LOAD 'input.txt' USING PigStorage(' ') AS(day:chararray,month:chararray,date:chararray,time:chararray,tzone:chararray,year:chararray);
    B = FOREACH A GENERATE CONCAT(CONCAT(CONCAT(CONCAT(day,', ',date),' ',month),' ',year),' ',time) AS mytime;
    C = FOREACH B GENERATE ToDate(mytime,'EEE, d MMM yyyy HH:mm:ss','GMT') AS newTime;
    D = FOREACH C GENERATE GetMonth(newTime),GetDay(newTime),GetYear(newTime),GetHour(newTime),GetMinute(newTime);
    DUMP D;
    
    (10,15,2014,9,26)
    (10,15,2014,19,26)
    (10,15,2014,8,26)
    (10,22,2014,10,26)
    (10,5,2014,9,26)
    (11,19,2014,19,26)
    

    绝妙的解决方案。谢谢你对我的问题做出的友好回应。这是一个绝妙的解决方案。谢谢你对我的问题的友好回应。