[HADOOP] 돼지 라틴어 스크립트를 실행하는 동안 예외를 얻기
HADOOP돼지 라틴어 스크립트를 실행하는 동안 예외를 얻기
난 내 자신에 돼지를 배우고 및 데이터 집합을 탐험하는 동안 나는 예외가 발생하고있다. 어떻게 스크립트 왜 잘못이다 :
movies_data = LOAD '/movies_data' using PigStorage(',') as (id:chararray,title:chararray,year:int,rating:double,duration:double);
high = FILTER movies_data by rating > 4.0;
high_rated = FOREACH high GENERATE movies_data.title,movies_data.year,movies_data.rating,movies_data.duration;
DUMP high_rated;
지도의 끝에서 실행 나는 아래의 오류를 얻고을 줄일 수 있습니다.
2018-07-22 20:11:07,213 [main] ERROR org.apache.pig.tools.grunt.Grunt
ERROR 1066: Unable to open iterator for alias high_rated.
Backend error : org.apache.pig.backend.executionengine.ExecException:
ERROR 0: Scalar has more than one row in the output.
1st : (1,The Nightmare Before Christmas,1993,3.9,4568.0),
2nd :(2,The Mummy,1932,3.5,4388.0)
(common cause: "JOIN" then "FOREACH ... GENERATE foo.bar" should be "foo::bar" )
해결법
-
==============================
1.첫째, 우리는 당신의 문제를 해결할 수있는 방법을 살펴 보자. 당신은 별칭 이름을 사용하여 필드에 액세스 할 필요가 없습니다. 귀하의 세 번째 라인은 단순히 수 :
첫째, 우리는 당신의 문제를 해결할 수있는 방법을 살펴 보자. 당신은 별칭 이름을 사용하여 필드에 액세스 할 필요가 없습니다. 귀하의 세 번째 라인은 단순히 수 :
high_rated = FOREACH high GENERATE title, year, rating, duration;
:)이 ERROR 제안에서 볼 수 있듯이 : 당신이 어떤 이유로 별칭 이름을 사용하고자하는 경우에는 참조 연산자 (사용해야합니다. 그런 다음 줄은 같을 것이다 :
high_rated = FOREACH high GENERATE movies_data::title, movies_data::year, movies_data::rating, movies_data::duration;
다음의 오류 메시지 뒤에 정확한 이유를 이해하려고 노력하자. 당신은 도트 연산자 (.)를 사용하여 필드에 액세스하려고 할 때, 돼지 별명은 스칼라 (별칭은 하나의 행을 가짐)이라고 가정합니다. 별명이 하나 개 이상의 행을 가지고 있기 때문에, 불평했다. 당신은 돼지에서 스칼라에 대한 자세한 내용을 여기 읽을 수 있습니다 : https://issues.apache.org/jira/browse/PIG-1434
JIRA의 출시 메모 섹션에서, 당신이 말에주의 할 것이다, 예상되는 오류 메시지가 점점 오류가 일치 :
If a relation contains more than single tuple, a runtime error is generated: "Scalar has more than one row in the output"
-
==============================
2.이 오류없이 작동합니다.
이 오류없이 작동합니다.
movies_data = LOAD '/movies_data' using PigStorage(',') as (id:chararray,title:chararray,year:int,rating:double,duration:double); high = FILTER movies_data by rating > 4.0; high_rated = FOREACH high GENERATE title,year,rating,duration; DUMP high_rated;
필터 명령은 모든 열 레코드 필터 조건을 만족할 수있다.
from https://stackoverflow.com/questions/51466235/getting-exception-while-trying-to-execute-a-pig-latin-script by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하이브 / 하둡은 Oozie를 사용으로 임시 쿼리를 예약 (0) | 2019.10.07 |
---|---|
[HADOOP] 감속기에서 동일하게 반복 할 하둡에 TwoDArrayWritable을 사용자 정의하지 수 (0) | 2019.10.07 |
[HADOOP] 하둡 스트리밍 : 어디 응용 프로그램 로그는? (0) | 2019.10.07 |
[HADOOP] 하둡 네임 노드, 체크 포인트 노드 및 백업 노드를 사용의 장점과 단점은 무엇입니까? (0) | 2019.10.07 |
[HADOOP] 하둡 스트리밍 mapred.local.dir 오류 (0) | 2019.10.07 |