2014-10-07 3 views
1

돼지 필터가 제대로 작동하지 않는 사람이 있습니까? 그리고 일반적으로 바보 같은 행동.돼지 필터가 작동하지 않습니다.

예를 들어, 다음과 같은 로그가 있습니다.

a1 

(2013-12-25 02:55:08,000085594,15468,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,63943,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,64014,80365991,1387940111723) 

decribe a1 

a1: {time:chararray, id:chararray, buckets::bucket: int, chararray, chararray) 

$ 2로 필터링하려고하면. 오류가 발생했습니다.

a2 = filter a2 by ($2 == 64034); 

다음과 같은 오류가 발생합니다. 오류 1066 : 별칭 a2에 대한 반복기를 열 수 없습니다.

나는 이것에 대해 꽤 혼란스러워하고 알아 내지 못한다. 따라서 숫자가 일치하면 "예"또는 "아니오"를 반환하는 Python UDF가 잘못되었습니다.

@outputSchema('y:chararray') 
def bucket(bucket): 
    if bucket == '64034': 
     return "Yes" 
    else: 
     return "No" 

a3 = foreach a1 generate time, myfuncs.bucket($2), $3, $4; 

describe a3 
a3: {time:chararray, id:chararray, y:chararray, chararray, cararray} 

아니요.이 필터는 작동하지 않습니다.

a4 = filter a3 by ($2 == 'Yes'); 

이렇게하면 원하는 결과가 생성됩니다. 그러나 다른 UDF를 사용하여 데이터를 몇 가지 더 변환해야합니다. 이러한 UDF는 열 $ 2에 대해 아무 것도 수행하지 않습니다. 그들은 $ 1과 $ 3 컬럼을보고 있습니다. 두 UDF 모두 필터 전에 사용하면 작동합니다. 그러나 필터 다음에 UDF를 적용하려고하면 "별칭을 열 수 없습니다"오류가 발생합니다. 또한 필터 앞에 추가 UDF를 수행 한 다음 필터를 적용하면 필터가 작동을 멈추고 "별칭을 열 수 없습니다"라는 오류가 발생합니다. 다시 이것들은 $ 2의 스키마를 전혀 변경하지 않습니다.

그래서 여기에 무슨 일이 일어날 수 있습니까? 하나는 필터가 원래 작동하지 않는 이유입니다. 둘째, 특정 UDF가 작동하는 이유와 겉으로보기에는 논리적으로 작동하지 않는 이유는 무엇입니까? 어떤 종류의 문제 해결 방향이 도움이 될 것입니다.

+0

[ERROR 1066 : 별명에 대한 반복자를 열 수 없습니다 (http://stackoverflow.com/questions/34495085/error -1066-open-iterator-for-alias-in-pig-generic-solution)은 일반적인 솔루션입니다 (http://stackoverflow.com/a/34495086/983722). –

답변

1

a2가 아직 정의되지 않은 것 같습니다. 더 많은 가능성으로 가야 코드는 다음과 같습니다를 찾을 때이 게시물을 발견 사람들을 위해

a2 = filter a1 by ($2 == 64034); 
관련 문제