Search code examples
apache-pigclouderadiacritics

PIG: how filter a field with special characteres


I need filter a list of accented words, because is Portuguese.

The load is working:

arq = LOAD '/user/cloudera/file1.5.txt' USING PigStorage(';') as 
(time:chararray,
cd_rastreio:chararray, 
hora:chararray, 
detalhe:chararray, 
local:chararray, 
destino:chararray);

I need make a filter like this:

[...]
detalhe IN (
'A entrega não pode ser efetuada - Carteiro não atendido',
'A entrega não pode ser efetuada - Cliente desconhecido no local',
'A entrega não pode ser efetuada - Cliente mudou-se')

But it returns no lines, I believe is because of "ã".

What Could I do?


Solution

  • I am able to use the filter you described above (in Pig version 0.16), for example:

    B = FILTER arq BY detalhe IN (
        'A entrega não pode ser efetuada - Carteiro não atendido',
        'A entrega não pode ser efetuada - Cliente desconhecido no local',
        'A entrega não pode ser efetuada - Cliente mudou-se');
    dump
    
    (A entrega não pode ser efetuada - Carteiro não atendido)
    (A entrega não pode ser efetuada - Cliente desconhecido no local)
    (A entrega não pode ser efetuada - Cliente mudou-se)
    

    Can you inspect your file in HDFS to make sure it still has the character ã and hasn't been scrubbed by a previous process?

    Regardless, you can write a regex expression and use MATCHES to filter without using the ã character, for example, with . in place of ã:

    B = FILTER arq BY detalhe MATCHES 
        'A entrega n.o pode ser efetuada - (Carteiro n.o atendido|Cliente desconhecido no local|Cliente mudou-se)';
    dump
    
    (A entrega não pode ser efetuada - Carteiro não atendido)
    (A entrega não pode ser efetuada - Cliente desconhecido no local)
    (A entrega não pode ser efetuada - Cliente mudou-se)