Конвертировать «3» в 3 с помощью PigLatin - PullRequest
6 голосов
/ 08 декабря 2010

Я прочитал в csv-файле, который содержит поля с такими номерами: "3".Могу ли я преобразовать эти поля из "3" в 3 с помощью PigLatin?Мне нужно использовать SUM () - Функция.

Спасибо за вашу помощь!

Ответы [ 3 ]

9 голосов
/ 11 января 2011

Как насчет простого удаления " с помощью REPLACE ?

Например:

data =
    LOAD 'data.txt' AS (num:CHARARRAY);

numbers =
    FOREACH data
    GENERATE
        (INT) REPLACE(num, '\\"', '');

Тогда вы можете GROUP и SUM.

Одним из преимуществ является то, что вы можете привести возвращенную строку непосредственно к числу (не нужно разбираться с сумками). REGEX_EXTRACT можно использовать и для того же.

6 голосов
/ 08 декабря 2010

Функция TOKENIZE разбивает строку на различные символы, которые считаются разделителями слов, один из которых - кавычка. Так что, если вы токенизируете «3» и берете средний предмет, это должно быть просто 3.

3 голосов
/ 08 декабря 2010

Вы можете написать UDF, который обрезает кавычки ИЛИ использовать подход JacobM.

Однако после этого вы должны разыграть chararray '3' до int: (int)$1 или (int)myvalue. Таким образом, вы можете использовать sum.

http://pig.apache.org/docs/r0.5.0/piglatin_reference.html#Cast+Operators

...