удаление неверных данных из файла данных с помощью свиньи - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть такой файл данных

1943 49 1
1975 91 L
1903 56 3
1909 52 3
1953 96 3
1912 82 
1976 66 3
1913 35 
1990 45 1
1927 92 A
1912  2
1924 22 
1971  2
1959 94 E

теперь, используя скрипт свиньи, я хочу удалить неверные данные, такие как удаление тех строк, которые имеют символы и пустые поля Я пробовал таким образом

records = load '/user/a106524609/test.txt' using PigStorage(' ') as 
(year:chararray, temperature:int, quality:int); 
rec1 = filter records by temperature != 'null' and (quality != 'null ')

1 Ответ

1 голос
/ 28 апреля 2019

Загрузить как строки

A = load 'data.txt' using PigStorage('\n') as (line:chararray);

Разделить на все пробелы

B = FOREACH A GENERATE FLATTEN(STRSPLIT(line, '\\s+')) as (year:int,temp:int,quality:chararray);

Фильтр по действительным строкам

C = FILTER B BY quality IN ('0','1','2','3','4','5','6','7','8','9');

(Опционально) Приведение к int

D = FOREACH C GENERATE year,temp,(int)quality;

В Spark я бы начал с соответствия регулярному выражению ожидаемого формата.

val cleanRows = sc.textFile("data.txt")
    .filter(line => line.matches("(?:\\d+\\s+){2}\\d+"))
...