Фильтровать записи по ключу - PigLatin - PullRequest
0 голосов
/ 24 февраля 2012

Я начинаю изучать PigLatin, и у меня возникает вопрос ...

Сейчас я работаю с классическим примером подсчета слов, где я обрабатываю несколько электронных книг, а затем получаюсписок слов и количество раз, которое появляется каждое слово.

Используя эти данные в качестве входных данных для pig, я затем сортирую их по количеству раз, когда каждое слово появляется, и я получаю 5 самых распространенных слов.Пока все хорошо, моя проблема в том, что теперь я хочу получить 5 самых распространенных слов, но они появляются разное количество раз.Позвольте мне объяснить немного лучше:

Вообразите этот вывод для задания подсчета слов:

(hey, 1)
(hello, 10)
(my, 2)
(cat, 1)
(eat, 4)
(mom, 10)
(house, 10)

Затем я сделаю следующее в оболочке Grunt:

data = load 'file' as (word, freq);
srtd = order data by freq;
lmtd = limit srtd 3;
dump lmtd;

Вывод, который я получу:

(hello, 10)
(mom, 10)
(house, 10)

Но что, если бы я хотел получить это:

(hello, 10)
(eat, 4)
(my, 2)

Как бы я отфильтровал повторяющиеся значения частоты?

Спасибо!

1 Ответ

1 голос
/ 28 февраля 2012

Вы могли бы написать UDF, чтобы сделать это, возможно, немного быстрее с точки зрения MR, но вы можете попробовать один из них.

data = load 'file' as (word, freq);
counts = GROUP data BY freq;
countsLimited = FOREACH counts {
    word = TOP(1, 2, data);
    GENERATE FLATTEN(word);
}

или

data = load 'file' as (word, freq);
counts = GROUP data BY freq;
countsLimited = FOREACH counts {
    word = LIMIT data 1;
    GENERATE word;
}
...