

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

# S3 Select와 함께 Spark를 사용하여 쿼리 성능 향상
<a name="emr-spark-s3select"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon EMR 릴리스 5.17.0 이상에서는 Amazon EMR 기반 Spark에서 [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/)를 사용할 수 있습니다. *S3 Select*를 사용하면 애플리케이션이 객체에서 데이터 하위 집합만 검색할 수 있습니다. Amazon EMR의 경우 처리를 위해 대형 데이터 세트를 필터링하는 계산 작업이 클러스터에서 Amazon S3로 '푸시다운'되어 일부 애플리케이션의 성능이 향상되고 Amazon EMR과 Amazon S3 사이에 전송되는 데이터의 양이 줄어듭니다.

S3 Select는 `s3selectCSV` 및 `s3selectJSON` 값을 사용하여 데이터 형식을 지정하는 CSV 및 JSON 파일에서 지원됩니다. 자세한 내용과 예제는 [코드에서 S3 Select 지정](#emr-spark-s3select-specify) 섹션을 참조하세요.

## S3 Select가 애플리케이션에 적합한가요?
<a name="emr-spark-s3select-apps"></a>

S3 Select 사용 여부에 관계없이 애플리케이션을 벤치마킹하여 애플리케이션에 적합한지 여부를 확인하는 것이 좋습니다.

다음 지침을 사용하여 애플리케이션과 함께 S3 Select를 사용할 수 있는지 확인하세요.
+ 쿼리가 원본 데이터 세트 중 반 이상을 필터링합니다.
+ Amazon S3 및 Amazon EMR 클러스터 간 네트워크 연결의 전송 속도와 가용 대역폭이 양호합니다. Amazon S3는 HTTP 응답을 압축하지 않으므로 압축된 입력 파일의 경우 응답 크기가 증가할 수 있습니다.

## 고려 사항 및 제한 사항
<a name="emr-spark-s3select-considerations"></a>
+ 고객 제공 암호화 키를 사용하는 Amazon S3 서버 측 암호화(SSE-C) 및 클라이언트 측 암호화는 지원되지 않습니다.
+ `AllowQuotedRecordDelimiters` 속성이 지원되지 않습니다. 이 속성이 지정되면 쿼리가 실패합니다.
+ UTF-8 형식의 CSV 및 JSON 파일만 지원됩니다. 여러 줄의 CSV는 지원되지 않습니다.
+ 비압축 또는 gzip 파일만 지원됩니다.
+ `nanValue`, `positiveInf`, `negativeInf` 및 손상된 레코드와 관련된 옵션(예: failfast 및 dropmalformed 모드)은 지원되지 않습니다.
+ 10진수 안에 쉼표(,)를 사용하는 것은 지원되지 않습니다. 예를 들어, `10,000`은 지원되지 않고 `10000`은 지원됩니다.
+ 마지막 줄의 설명 문자는 지원되지 않습니다.
+ 파일 끝의 빈 줄은 처리되지 않습니다.
+ 다음과 같은 필터는 Amazon S3로 푸시다운되지 않습니다.
  + `COUNT()` 및 `SUM()` 등의 집계 함수
  + 속성에 대해 `CAST()`를 사용하는 필터링 예를 들어 `CAST(stringColumn as INT) = 1`입니다.
  + 객체이거나 복잡한 속성을 가진 필터 예를 들어 `intArray[1] = 1, objectColumn.objectNumber = 1`입니다.
  + 값이 리터럴 값이 아닌 필터 예: `intColumn1 = intColumn2`
  + 문서화된 제한 사항으로 [S3 Select 지원 데이터 형식](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html)만 지원됩니다.

## 코드에서 S3 Select 지정
<a name="emr-spark-s3select-specify"></a>

다음 예제는 Scala, SQL, R 및 PySpark를 사용하여 CSV에 대해 S3 Select를 지정하는 방법을 보여줍니다. JSON에 대해 S3 Select를 동일한 방식으로 사용할 수 있습니다. 옵션 목록, 기본값 및 제한 사항을 보려면 [옵션](#emr-spark-s3select-specify-options) 섹션을 참조하세요.

------
#### [ PySpark ]

```
spark
  .read
  .format("s3selectCSV") // "s3selectJson" for Json
  .schema(...) // optional, but recommended
  .options(...) // optional
  .load("s3://path/to/my/datafiles")
```

------
#### [ R ]

```
read.df("s3://path/to/my/datafiles", "s3selectCSV", schema, header = "true", delimiter = "\t")
```

------
#### [ Scala ]

```
spark
  .read
  .format("s3selectCSV") // "s3selectJson" for Json
  .schema(...) // optional, but recommended
  .options(...) // optional. Examples:  
  // .options(Map("quote" -> "\'", "header" -> "true")) or
  // .option("quote", "\'").option("header", "true")
  .load("s3://path/to/my/datafiles")
```

------
#### [ SQL ]

```
CREATE TEMPORARY VIEW MyView (number INT, name STRING) USING s3selectCSV OPTIONS (path "s3://path/to/my/datafiles", header "true", delimiter "\t")
```

------

### 옵션
<a name="emr-spark-s3select-specify-options"></a>

`s3selectCSV` 및 `s3selectJSON`을 사용하는 경우 다음 옵션을 사용할 수 있습니다. 지정되지 않은 경우 기본값이 사용됩니다.

#### S3selectCSV와 옵션
<a name="emr-spark-s3select-specify-options-csv"></a>


| 옵션 | 기본값 | 사용법 | 
| --- | --- | --- | 
|  `compression`  |  `"none"`  |  압축 사용 여부를 나타냅니다. `"none"` 외에도 `"gzip"`만 지원됩니다.  | 
|  `delimiter`  |  ","  |  필드 구분 기호를 지정합니다.  | 
|  `quote`  |  `'\"'`  |  따옴표 문자를 지정합니다. 빈 문자열 지정은 지원되지 않으며 잘못된 XML 오류가 발생합니다.  | 
|  `escape`  |  `'\\'`  |  이스케이프 문자를 지정합니다.  | 
|  `header`  |  `"false"`  |  `"false"` 는 헤더가 없음을 나타냅니다. `"true"`는 헤더가 첫 번째 줄에 있음을 나타냅니다. 첫 번째 줄의 헤더만 지원되며 헤더 앞의 빈 줄은 지원되지 않습니다.  | 
|  설명  |  `"#"`  |  설명 문자를 지정합니다. 설명 표시기는 비활성화할 수 없습니다. 즉, `\u0000`의 값은 지원되지 않습니다.  | 
|  `nullValue`  |  ""  |    | 

#### selectJSON과 옵션
<a name="emr-spark-s3select-specify-options-json"></a>


| 옵션 | 기본값 | 사용법 | 
| --- | --- | --- | 
|  `compression`  |  `"none"`  |  압축 사용 여부를 나타냅니다. `"none"` 외에도 `"gzip"`만 지원됩니다.  | 
|  `multiline`  |  "false"  |  `"false"`는 JSON이 S3 Select `LINES` 형식인 것으로 지정합니다. 즉, 입력 데이터의 각 줄에 단일 JSON 객체가 들어 있음을 의미합니다. `"true"`는 JSON이 S3 Select `DOCUMENT` 형식인 것으로 지정합니다. 이는 JSON 객체가 입력 데이터의 여러 줄에 걸쳐 있을 수 있음을 의미합니다.  | 