2015-03-27 2 views
1

У меня есть данные формата в свиньюапач Свинья пытается получить максимальное количество в каждой группе

{(group, productId, count)}.

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

{(group, productId, maxCount)}. Здесь входные данные пробы

  • (south America,prod1, 45),(south America,prod2, 36), (latin america, prod1, 48),(latin america, prod5,35)

здесь выход для этого входа выглядят как

  1. (south america, prod1, 45)
  2. (North America, prod2, 36)
  3. (latin america, prod1, 48)

Может кто-нибудь мне помочь в этом.

ответ

3

на основе ваших образцов входных данных, это следует сделать трюк:

data = load 'sf.csv' using PigStorage(',') as (country:chararray, product:chararray, c:int); 
g = group data by country; 
result = foreach g { 
    prods = order data by c desc; 
    top_prods = limit prods 1; 
    generate flatten(top_prods); 
} 
dump result; 

этой группы вход по первому столбцу, затем во вложенном Еогеасп он заказывает продукты в каждой группе по количеству, а затем принимает первый (наибольший счет).

Выход:

(latin america,prod1,48) 
(south America,prod1,45) 
Смежные вопросы