Pig - FilterFunc 不要取整个元组



我的Pig的一个过滤函数有问题。

但首先,我要告诉你上下文。

A = LOAD 'pig/hado/start_extrait2.csv' USING PigStorage(';') as (DAT_START:chararray, COD_IPUSER:chararray, NDI_START:chararray);
hado_search_file = LOAD 'pig/hado/recherche_hado.csv' USING PigStorage(';') as (DATE_HADO:chararray, IP_RECHERCHEE:chararray);
result2 = JOIN hado_search_file by IP_RECHERCHEE LEFT OUTER, A by COD_IPUSER;

让我们尝试可视化"result2"变量:

describe result2;
{hado_search_file::DATE_HADO: chararray,hado_search_file::IP_RECHERCHEE: chararray,A::COD_IPUSER: chararray,A::DAT_START: chararray,A::NDI_START: chararray}
dump result2;
(2014/03/10 00:00:00,192.168.2.67,,,)
(2014/03/10 00:00:00,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:00,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:01,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)
(2014/03/10 00:00:01,79.92.147.88,79.92.147.88,2014/03/10 00:00:00,0385578168)

然后,我尝试使用FilterFunc

flt = FILTER result2 BY dateInferiorOrNull();

代码的开头是:

public class dateInferiorOrNull  extends FilterFunc {
    @Override
    public Boolean exec(Tuple input) throws IOException {
        System.out.println(input);
        ...
    }
}

我希望得到与之前的"dump result2"相同的输出,但相反,我得到了这样的东西:

(2014/03/10 00:00:00,79.92.147.88)

只有前两个字段被占用了!

当我试图显示元组的大小时,程序说元组的大小是2 !

所以看起来filter函数并没有把整个元组作为输入。

为什么会这样?

谢谢你的帮助。

从输入元组(您将作为参数传递给UDF)获得您想要的结果中的列,然后将其添加到DataBag,然后从UDF返回此DataBag。这个UDF的输出是一个Bag,然后在您的pig脚本中将这个Bag平铺。

最新更新