扁平化字符串后 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);