压扁字符串后pig中的模式

j5fpnvbx  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(311)

在pig中平展字符串之后,我在实现字段对象(模式)时遇到了问题。我有以下代码:
数据=加载'data/.txt',使用pigstorage()作为(。。。。,date:chararray, .....);
b=foreach数据展平(regex\u extract\u all(date,'''(.)/(.)/(.
))
(.):(.):(.*)“')作为(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\文件';
其中日期在表格中('2/23/2015 23:56:49')
这个很好用。但是当我在b中使用filter(year==2015或month==1或month==2)时,这个代码不起作用。你知道如何在压平绳子后使用任何字段吗?。谢谢你的帮助。

rkue9o1l

rkue9o1l1#

你能试试这个吗?
输入:

2/23/2015 23:56:49
1/23/2014 23:56:49
9/23/2014 23:56:49
8/23/2014 23:56:49

Pig手稿:

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);

相关问题