Найти 5 самых популярных по сумме в Pig Script - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь найти топ-3 самых популярных мест с наибольшим количеством поездок. Поэтому мне нужно увидеть общее количество tripCount для каждого местоположения и вернуть наибольшее n ...

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

LocationID  tripCount  tripDistance
101            40           4.6
203            29           1.3
56             25           9.3
101            17           4.5
66             5            1.1
13             5            0.5
203            10           1.2
558            8            0.5
56             10           5.5 

Итак, результат, который я ожидаю, таков: :

 101     57 
 203     39
 56      35

Пока мой код:

B = GROUP UNION_DATA BY DOLocationID;
C = FOREACH B {                          
DA = ORDER UNION_DATA BY passenger_count DESC;                
DB = LIMIT DA 5;                         
GENERATE FLATTEN(group), FLATTEN(DB.LocationID), FLATTEN(DB.dropoff_datetime);
}

Что мне не хватает и что мне нужно сделать, чтобы получить ожидаемый результат?

1 Ответ

1 голос
/ 05 марта 2020

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

LocationID, tripCount, tripDistance

cat > trip_data.txt 
    101,40,4.6
    203,29,1.3 
    56,25,9.3 
    101,17,4.5 
    66,5,1.1 
    13,5,0.5 
    203,10,1.2 
    558,8,0.5
    56,10,5.5

PIG-код:

A = load '/home/ec2-user/trip_data.txt' using PigStorage(',') as (LocationID,tripCount,tripDistance);
    describe A;
    B = GROUP A BY LocationID;
    describe B;
    dump B;
    C = FOREACH B GENERATE group, SUM(A.tripCount);
    describe C;
    dump C;
    D = ORDER C BY $1 DESC;
    describe D;
    dump D;
    RESULT = LIMIT D 3;
    describe RESULT;
    dump RESULT;
...