очень простой код для новичков на пиг-латине

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

Но я понял одну вещь: чтобы начать внедрять/использовать хауоп или распределенные коды, нужно в основном изменить то, как они думают о проблеме.

Мне было интересно, может ли кто-нибудь помочь мне в следующем.

Итак, в основном (как и у всех) у меня есть необработанные данные. Я хочу проанализировать их и извлечь некоторую информацию, а затем запустить какой-то алгоритм и сохранить результаты.

Допустим, у меня есть текстовый файл "foo.txt", в котором данные выглядят так:

 id,$value,garbage_field,time_string\n
  1, 200, grrrr,2012:12:2:13:00:00
  2, 12.22,jlfa,2012:12:4:15:00:00
  1, 2, ajf, 2012:12:22:13:56:00

Как видите, идентификатор может повторяться. Этот идентификатор может быть похож на то, сколько денег потратил клиент!! Что я хочу сделать, так это сохранить результат в файле, который содержит информацию о том, сколько денег каждый из клиентов потратил «утром», «днем», «вечером», «ночью» (вы можете определить свои периоды времени, чтобы определить, какое утро и все есть.к примеру вот наверное

     1, 0,202,0,0 
1 is the id, 0--> 0$ spent in morning, 202 in afternon, 0 in evening and night

Теперь у меня есть код на Python для этого. Но мне нужно реализовать это в свинье.., чтобы начать. Если кто-нибудь может просто написать/провести меня через это... Это все, что мне нужно для начала.

Спасибо


person frazman    schedule 30.08.2012    source источник


Ответы (1)


Я бы начал так:

foo = LOAD 'foo.txt' USING PigStorage(',') AS (
    CUSTOMER_ID:int, 
    DOLLARS_SPENT:float, 
    GARBAGE_FIELD, 
    TIME_STRING:chararray
);

foo_with_timeslots = FOREACH foo {
    GENERATE 
        CUSTOMER_ID,
        DOLLARS_SPENT,
        /* DO TIME SLOT CALCULATION HERE */ AS TIME_SLOT
    ;
}

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

id_grouped_foo_with_timeslots = GROUP foo_with_timeslots BY (
    CUSTOMER_ID, 
    TIME_SLOT
);

-- Calculate how much each customer spent at time slots
spent_per_customer_per_timeslot = FOREACH id_grouped_foo_with_timeslots {
    GENERATE 
        group.CUSTOMER_ID as CUSTOMER_ID,
        group.TIME_SLOT as TIME_SLOT,
        SUM(foo_with_timeslots.DOLLARS_SPENT) as TOTAL_SPENT
    ;
}

У вас будет вывод, как показано ниже, в файле expires_per_customer_per_timeslot.

1,Morning,200
1,Evening,100
2,Afternoon,30

На этом этапе должно быть тривиально перегруппировать данные и придать им нужную форму.

person Cihan Keser    schedule 30.08.2012