돼지 필터가 제대로 작동하지 않는 사람이 있습니까? 그리고 일반적으로 바보 같은 행동.돼지 필터가 작동하지 않습니다.
예를 들어, 다음과 같은 로그가 있습니다.
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가 작동하는 이유와 겉으로보기에는 논리적으로 작동하지 않는 이유는 무엇입니까? 어떤 종류의 문제 해결 방향이 도움이 될 것입니다.
[ERROR 1066 : 별명에 대한 반복자를 열 수 없습니다 (http://stackoverflow.com/questions/34495085/error -1066-open-iterator-for-alias-in-pig-generic-solution)은 일반적인 솔루션입니다 (http://stackoverflow.com/a/34495086/983722). –