복붙노트

[HADOOP] 돼지에서 다른 행에서 한 행의 값을 빼기

HADOOP

돼지에서 다른 행에서 한 행의 값을 빼기

나는 약간의 로그 파일을 분석하기 위해 돼지를 사용하여 샘플 프로그램을 개발하기 위해 노력하고있어. 나는 다른 작업의 실행 시간을 분석 할. 내가 작업의 로그 파일을 읽을 때, 나는 시작 시간과 같은 작업의 종료 시간을 얻을 :

(Wed,03/20/13,01:03:37,EDT)
(Wed,03/20/13,01:05:00,EDT)

이제, 경과 시간을 계산하기 위해, 나는이 2 타임 스탬프를 뺄 필요하지만, 두 타임 스탬프가 같은 가방에 있기 때문에, 나는 그들을 비교하는 방법을 모르겠어요. 그래서 나는이 작업을 수행하는 방법에 대한 아이디어를 찾고 있어요. 감사!

해결법

  1. ==============================

    1.두 로그 라인에있는 작업에 대한 고유 ID가 있습니까? 또한 시작되는 이벤트 표시하는 뭔가가, 그리고 끝은 무엇입니까?

    두 로그 라인에있는 작업에 대한 고유 ID가 있습니까? 또한 시작되는 이벤트 표시하는 뭔가가, 그리고 끝은 무엇입니까?

    그렇다면, 당신은 한 번 최종 이벤트 시작 이벤트, 두 번, 한 번 데이터 집합을 읽고, 함께이 가입 할 수있다. 그런 다음 그 안에 두 이벤트 모두 하나 개의 기록을 가지고 있습니다.

    그래서:

    A = FOREACH logline GENERATE id, type, timestamp;
    START = FILTER A BY (type == 'start');
    
    END = FILTER A  BY (type == 'end');
    
    JOINED = JOIN START by ID, END by ID;
    
    DIFF = FOREACH JOINED GENERATE (START.timestamp - END.timestamp); // or whatever;
    
  2. from https://stackoverflow.com/questions/15574159/subtract-one-rows-value-from-another-row-in-pig by cc-by-sa and MIT license