扁平化字符串后Pig中的模式

时间:2015-02-10 17:25:35

标签: schema apache-pig flatten

我在使用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之后,你有一个好主意如何使用任何字段吗?谢谢您的帮助。

1 个答案:

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