2016-05-17 2 views
1

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

Формат файла выглядит следующим образом:

ID Name Year Gender State Count 

1 Jones 1980 M  MA 100 

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

Как я могу перебрать каждый лет и рассчитывать для каждого состояния процент появления каждого имени?

Результат должен выглядеть следующим образом:

1901 Jones MA 2% 
    1901 Jones VT 3% 
    1901 Smith MA 1% 
    1901 Lee VT 4% 
    .... 
    .... 

    2016 Jones MA 2% 
    2016 Jones VT 3% 
    2016 Smith MA 1% 
    2016 Lee VT 4% 

За каждый год в таблице, мне нужно разбить его государством и в каждом государстве, мне нужно, чтобы вычислить процент для каждого имени данной информации граф.

+0

пожалуйста, вы можете опубликовать формат результата вы ожидаете –

+0

Исправленные оригинальный пост, чтобы включить результаты я ищу – TheGoat

+0

Как процент определяется, например, 2%? –

ответ

2

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

См. Ниже.

A = LOAD 'census_data' USING PigStorage('\t') as (int:id,name:chararray,year:chararray,gender:chararray,state:chararray,int:count); 
B = GROUP A by (year,state); 
C = FOREACH B GENERATE FLATTEN(group) as (year,state),SUM(A.count) as occurances; 
D = JOIN A BY (year,state),C BY (year,state); 
E = FOREACH D GENERATE A::year,A::name,A::state,CONCAT(A::count/C::occurances,'%'); --If you get an error try A.year,A.name,A.state,CONCAT(A.count/C.occurances,'%'); 
DUMP E; 
+0

Спасибо inquisitive_mind, это очень умный способ решения проблемы. В строке 3, если сглаживание должно быть для A, а не для группы? – TheGoat

+0

@PigWolf Нет, это должно быть для группы, так как мы являемся группой A по 2 полям, а затем мы хотим, чтобы поля были разделены на группу. Я ее не тестировал, но логика должна помочь вам получить желаемый результат –