如何在Pig加载后分配架构

时间:2015-09-08 16:32:20

标签: hadoop apache-pig

假设我有这样的代码

REGISTER 'SomeSript.jar'

RAW_DATA = LOAD '/home/pig/input/'  as (linearray:chararray);

FILTER_RAW_DATA = FILTER RAW_DATA BY com.pig.CustomFilter(RAW_DATA); 

< -

这里我想为ALAISE'FILTER_RAW_DATA'分配一个架构。

EG :(名称:chararray,pos:chararray,location:chararray,status:chararray),理想情况下我们在加载时间做,我想在Filter Step之后分配它。

- >

KEY_GROUP = GROUP FILTER_RAW_DATA BY location;

STORE KEY_GROUP into 'Output';

如何在我的GROUP By To Work的过滤器操作之后分配模式。

我们是否可以为Group-by编写自定义函数,正如我上面为过滤写的CustomFilter一样。

等待答案。

先谢谢 干杯:)

1 个答案:

答案 0 :(得分:0)

过去我使用REGEX_EXTRACT_ALL从chararray中提取了类型化的元组。

TYPED_FILTER_RAW_DATA = FOREACH FILTER_RAW_DATA GENERATE REGEX_EXTRACT_ALL(line,'REGEX')AS(name:chararray,pos:chararray,location:chararray,status:chararray);

需要注意的是,如果需要键入数值数据类型,则需要另外一个GENERATE语句,您需要显式转换为该类型。例如,如果status是INT,则会失败(TEST = FILTER TYPED_FILTER_RAW_DATA BY status = 0;)

您首先需要: TEST = FOREACH TYPED_FILTER_RAW_DATA GENERATE ...,(int)tuple_0.status作为状态;

如果您的数据格式很好,也可以使用STRSPLIT。