

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Pig에서 사용자 정의 함수 직접 호출
<a name="emr-pig-udf"></a>

Pig는 Pig 스크립트 내에서 사용자 정의 함수(UDF)를 호출할 수 있는 기능을 제공합니다. 이 기능을 사용하여 Pig 스크립트에서 사용할 사용자 지정 처리를 구현할 수 있습니다. 현재 지원되는 언어는 Java, Python/Jython 및 JavaScript(JavaScript 지원은 아직 실험적임)입니다.

다음 섹션에서는 Pig 셸에서 또는 Pig 스크립트 내에서 호출할 수 있도록 Pig에 함수를 등록하는 방법을 설명합니다. Pig에서 UDF를 사용하는 방법에 자세한 내용은 해당 Pig 버전의 [Pig 설명서](http://pig.apache.org/docs/)를 참조하세요.

## Pig에서 JAR 파일 호출
<a name="UsingJarsWithPig"></a>

Pig 스크립트에서 `REGISTER` 명령을 사용하여 Pig에서 사용자 지정 JAR 파일을 사용할 수 있습니다. JAR 파일은 로컬 파일 시스템이거나 Amazon S3와 같은 원격 파일 시스템입니다. Pig 스크립트가 실행되면 Amazon EMR은 JAR 파일을 프라이머리 노드에 자동으로 다운로드한 다음 JAR 파일을 Hadoop 분산 캐시에 업로드합니다. 이 방식으로 JAR 파일은 클러스터의 모든 인스턴스에서 필요에 따라 자동으로 사용됩니다.

**Pig에서 JAR 파일을 사용하려면**

1. 사용자 지정 JAR 파일을 Amazon S3에 업로드합니다.

1. Pig 스크립트에서 `REGISTER` 명령을 사용하여 사용자 지정 JAR 파일의 Amazon S3에 있는 버킷을 지정합니다.

   ```
   REGISTER s3://amzn-s3-demo-bucket/path/mycustomjar.jar;
   ```

## Pig에서 Python 및 Jython 스크립트 직접 호출
<a name="emr-pig-udf-jython"></a>

Python 스크립트를 Pig에 등록한 다음 Pig 셸의 해당 스크립트 또는 Pig 스크립트에서 함수를 호출할 수 있습니다. `register` 키워드로 스크립트의 위치를 지정하여 이 작업을 수행합니다.

Pig는 Java로 작성되기 때문에 Jython 스크립트 엔진을 사용하여 Python 스크립트를 구문 분석합니다. Jython에 대한 자세한 내용은 [http://www.jython.org/](http://www.jython.org/)를 참조하세요.

**Pig에서 Python/Jython 스크립트를 호출하려면**

1. Python 스크립트를 작성하고 스크립트를 Amazon S3의 한 위치에 업로드합니다. 이 위치는 Pig 클러스터를 생성하는 계정 또는 클러스터를 생성한 계정이 클러스터에 액세스할 수 있도록 권한이 설정된 계정과 동일한 계정이 소유한 버킷이어야 합니다. 이 예제에서 스크립트는 s3://amzn-s3-demo-bucket/pig/python에 업로드됩니다.

1. Pig 클러스터를 시작합니다. Grunt 셸에서 Pig에 액세스할 경우 대화형 클러스터를 실행합니다. 스크립트에서 Pig 명령을 실행할 경우 스크립팅된 Pig 클러스터를 시작합니다. 이 예제에서는 대화형 클러스터가 시작됩니다. Pig 클러스터를 생성하는 방법에 대한 자세한 내용은 [Pig 작업 제출](emr-pig-launch.md) 섹션을 참조하세요.

1. 대화형 클러스터의 경우, SSH를 사용하여 마스터 노드에 연결한 후 Grunt 셸을 실행합니다. 자세한 내용은 [프라이머리 노드에 대한 SSH 연결](https://docs.aws.amazon.com/emr/latest/DeveloperGuide/EMR_SetUp_SSH.html)을 참조하세요.

1. 명령줄에 `pig`를 입력하여 Pig용 Grunt 셸을 실행합니다.

   ```
   pig
   ```

1. 다음과 같이 Grunt 명령 프롬프트에서 `register` 키워드를 사용하여 Jython 라이브러리와 Python 스크립트를 Pig에 등록합니다. 이때 Amazon S3에서 스크립트의 위치를 지정합니다.

   ```
   grunt> register 'lib/jython.jar';
   grunt> register 's3://amzn-s3-demo-bucket/pig/python/myscript.py' using jython as myfunctions;
   ```

1.  입력 데이터를 로드합니다. 다음 예제는 Amazon S3 위치에서 입력을 로드합니다.

   ```
   grunt> input = load 's3://amzn-s3-demo-bucket/input/data.txt' using TextLoader as (line:chararray);
   ```

1.  이제 `myfunctions`를 사용하여 함수를 참조하면 Pig 내에서 스크립트에 함수를 호출할 수 있습니다.

   ```
   grunt> output=foreach input generate myfunctions.myfunction($1);
   ```