扁平化字符串后 Pig 中的模式
Schema in Pig after Flattening the String
我在将 pig 中的字符串扁平化后实现字段对象(模式)时遇到问题。我有以下代码:
数据 = 使用 PigStorage( ) AS(...., date:chararray, ....);'data/*.txt';
B = foreach Data FLATTEN(REGEX_EXTRACT_ALL(date, '"(.)/(.)/(.*)
(.):(.):(.*)"')) AS (month:int, day:int, year:int, hour:int, min:int, second:int);
--B = 按年份过滤 B ==2015;
--B = 按月 ==1 或月 ==2 过滤 B;
C = foreach B生成速度,月,日,年,时,分;
使用 PigStorage(',');
将 C 存储到 'data/out_files'
日期在表格中 ('2/23/2015 23:56:49')
这很好用。但是当我在 B 中使用过滤器时(年 ==2015 或月 ==1 或月 ==2),此代码不起作用。你知道如何在展平字符串后使用任何字段吗?谢谢您的帮助。
你能试试这个吗?
输入:
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);
我在将 pig 中的字符串扁平化后实现字段对象(模式)时遇到问题。我有以下代码:
数据 = 使用 PigStorage( ) AS(...., date:chararray, ....);'data/*.txt';
B = foreach Data FLATTEN(REGEX_EXTRACT_ALL(date, '"(.)/(.)/(.*)
(.):(.):(.*)"')) AS (month:int, day:int, year:int, hour:int, min:int, second:int);
--B = 按年份过滤 B ==2015;
--B = 按月 ==1 或月 ==2 过滤 B;
C = foreach B生成速度,月,日,年,时,分;
使用 PigStorage(',');
将 C 存储到 'data/out_files'日期在表格中 ('2/23/2015 23:56:49')
这很好用。但是当我在 B 中使用过滤器时(年 ==2015 或月 ==1 或月 ==2),此代码不起作用。你知道如何在展平字符串后使用任何字段吗?谢谢您的帮助。
你能试试这个吗?
输入:
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);