我在使用pig中的字符串变平后实现字段对象(模式)时遇到了问题。我有以下代码:
Data = load'data / * .txt'使用PigStorage()AS(....,date:chararray,.....);
B = foreach Data FLATTEN(REGEX_EXTRACT_ALL(日期,'“(。)/(。)/(。*)
(。):(。):(。*)“'))AS(月:int,日:int,年:int,小时:int,min:int,second: INT);
- B =年份== 2015年过滤B;
- B =按月过滤B == 1或月== 2;
C = foreach B生成速度,月,日,年,小时,分钟;
使用PigStorage(',');
将C存储到'data / out_files'中日期的格式('2015年2月23日23:56:49')
这完全没问题。但是当我在B中使用过滤器(年= = 2015或月== 1或月== 2)时,此代码不起作用。在展平String之后,你有一个好主意如何使用任何字段吗?谢谢您的帮助。
答案 0 :(得分:1)
你能试试吗?
<强>输入强>
2/23/2015 23:56:49
1/23/2014 23:56:49
9/23/2014 23:56:49
8/23/2014 23:56:49
<强> PigScript:强>
A = LOAD 'input' AS (date:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(date, '([0-9]+)/([0-9]+)/([0-9]+)\\s+([0-9]+):([0-9]+):([0-9]+)')) AS (month,day,year,hour,min,second);
C = FILTER B BY (month==1) OR (month==2) OR (year==2015);
D = FOREACH C GENERATE month,day,year,hour,min,second;
DUMP D;
<强>输出:强>
(2,23,2015,23,56,49)
(1,23,2014,23,56,49)
以下正则表达式也有效。
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(date, '(\\d+)/(\\d+)/(\\d+)\\s+(\\d+):(\\d+):(\\d+)')) AS (month,day,year,hour,min,second);