Hadoop Pig заказал результаты;найти позицию заказа? - PullRequest
2 голосов
/ 09 декабря 2011

Я хочу отсортировать результаты, полученные от свиньи, и затем определить, какие элементы находятся в моих заказанных результатах. Пример:

mydata = LOAD 'mydata.txt' AS (label:chararray, rank_score:float);
ranked_data = ORDER mydata BY rank_score DESC;
ranked_positions = FOREACH ranked_data GENERATE label, AUTO_INCREMENT_ID;
results = FILTER ranked_data BY label = 'item1' OR label='item2';
DUMP results;

AUTO_INCREMENT_ID будет автоматически увеличиваться в моем идеальном мире. Учитывая, что картографы / редукторы независимы друг от друга, я предполагаю, что Pig / Hadoop может не поддерживать это. Если нет, можете ли вы придумать другой способ получить мой конечный результат?

Пример ввода:

item1       34.33
item2       48.39
item3       93.3

Желаемый вывод:

item1       3
item2       2

1 Ответ

1 голос
/ 13 декабря 2011

Если вы установите параллелизм ORDER на 1, вы можете просто сделать автоинкремент в udf; Конечно, это может привести к нежелательному эффекту использования только одного редуктора для вашей сортировки.

(Кроме того, я не уверен, как вы получили выходные данные в качестве примера - кажется, что входные данные уже упорядочены, поэтому item1 должен иметь идентификатор 1, а item 2 должен иметь идентификатор 2, верно? Вы имели в виду упорядочить по rank_score убывание ?)

...