2012-05-03 4 views
2

나는 돼지에 완전히 익숙하지 않고 약간의 문제가 있습니다.Pig에서 제약 조건이있는 복제본을 제거하려면 어떻게해야합니까?

데이터 목록이 있으며 중복을 제거하고 싶습니다. 하지만 동일한 사용자 이름을 사용하고 액세스 시간이 동일한 임계 값 내에 있으면 복제본이 정의된다는 사실을 알게되었습니다.

A : 예를 들면 : [USER1 10]

B : [USER1 20]

C : [USER1 11]

D : 사용자 2, 10]

임계 값이 2이면 A와 C를 중복으로 식별해야합니다. 돼지에서 어떻게합니까? 현재 UDF와 DISTINCT의 일부 조합을 사용해야하는 것처럼 보이지만 DISTINCT에서 "복제본"을 정의 할 대상을 지정하는 방법을 모르겠습니다.

감사합니다.

+0

"임계 값"이란 무엇입니까? 당신은 실제로 "거리"를 의미 했습니까? – ihadanny

답변

2
a=load 'data' as (user, access_time:int) using ...; 
b=foreach a generate user as user, (access_time > $threshold ? $threshold : access_time) as access_time; 
c=group b by user; 
d=foreach c generate group as user, FLATTEN(DISTINCT(b.access_time)) as access_time; 
store d; 

내가 스크립트를 테스트하지 못했지만, 아이디어는 사용자가 그룹이며, 임계 값 임계 값을 초과 모두를 교체 한 후 내장 별개의 UDF를 사용합니다.

관련 문제