假设我有这样的代码
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一样。
等待答案。
先谢谢 干杯:)
答案 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。