Как получить первый кортеж в сумке при группировке - PullRequest
0 голосов
/ 30 марта 2019

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

Я пытался использовать LIMIT, но это применимо только при выборе, полагаю,Я также использовал DISTINCT, но, по-моему, неправильный сценарий.

grouped = GROUP wantedTails BY tail_number;

smmd = FOREACH grouped GENERATE wantedTails.tail_number as Tails, SUM(wantedTails.distance) AS totaldistance;

Так что для моей группы я получил смг как (не весь): ({(N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB), (N983JB),(N983JB), (N983JB)}, 44550)

, но я ожидаю (N983JB, 44550).Как я могу удалить дубликаты, сгенерированные во время группировки?Спасибо!

1 Ответ

0 голосов
/ 31 марта 2019

На мой взгляд, существует два способа дедупликации данных в Pig.

  1. Менее гибкий, но удобный способ - применить MAX к столбцам, которые должны быть дублированы после выполнения GROUP BY. Примените SUM только если вы хотите сложить значения в дубликаты:

    dataWithDuplicates = LOAD '<path_to_data>';
    
    grouped = GROUP dataWithDuplicates BY tail_number;
    
    dedupedData= FOREACH grouped GENERATE
              --Since you have grouped on tailNumber, it is already de-duped
              group AS tailNumber, 
              MAX(dataWithDuplicates.distance) AS dedupedDistance,
              SUM(dataWithDuplicates.distance) AS totalDistance;
    
  2. Если вам нужна большая гибкость во время дедупликации, вы можете воспользоваться помощью nested- FOREACH в Pig. Этот вопрос отражает суть его использования: как удалить строки данных, которые повторяются в Pig . Другие ссылки на вложенный FORACH: https://www.safaribooksonline.com/library/view/programming-pig/9781449317881/ch06.html

...