S3 Select와 함께 Spark를 사용하여 쿼리 성능 향상 - 아마존 EMR

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

S3 Select와 함께 Spark를 사용하여 쿼리 성능 향상

아마존 EMR 릴리스 5.17.0 이상에서는 아마존에서 S3 Select를 스파크와 함께 사용할 수 있습니다. EMR S3 Select를 사용하면 애플리케이션이 객체에서 데이터 하위 집합만 검색할 수 있습니다. EMRAmazon의 경우 처리를 위해 대용량 데이터 세트를 필터링하는 컴퓨팅 작업이 클러스터에서 Amazon S3로 “푸시 다운”되므로 일부 애플리케이션의 성능이 향상되고 Amazon과 Amazon S3 간에 전송되는 데이터의 양이 줄어들 수 있습니다. EMR

S3 Select는 JSON 파일 CSV s3selectCSVs3selectJSON 값을 사용하여 데이터 형식을 지정할 수 있도록 지원됩니다. 자세한 정보와 지침은 코드에서 S3 Select 지정 섹션을 참조하세요.

S3 Select가 애플리케이션에 적합한가요?

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

다음 지침을 사용하여 애플리케이션과 함께 S3 Select를 사용할 수 있는지 확인하십시오.

  • 쿼리가 원본 데이터 세트 중 반 이상을 필터링합니다.

  • Amazon S3와 Amazon EMR 클러스터 간의 네트워크 연결은 전송 속도와 가용 대역폭이 양호합니다. Amazon S3는 HTTP 응답을 압축하지 않으므로 압축된 입력 파일의 경우 응답 크기가 증가할 수 있습니다.

고려 사항 및 제한

  • 고객 제공 암호화 키 (SSE-C) 를 사용한 Amazon S3 서버 측 암호화와 클라이언트 측 암호화는 지원되지 않습니다.

  • AllowQuotedRecordDelimiters 속성이 지원되지 않습니다. 이 속성이 지정되면 쿼리가 실패합니다.

  • -8 형식의 AND 파일만 CSV 지원됩니다. JSON UTF 여러 CSVs 줄은 지원되지 않습니다.

  • 비압축 또는 gzip 파일만 지원됩니다.

  • 스파크와nanValue, positiveInfnegativeInf, CSV 및 JSON 손상된 레코드와 관련된 옵션 (예: 페일패스트 및 dropmalform 모드) 은 지원되지 않습니다.

  • 10진수 안에 쉼표(,)를 사용하는 것은 지원되지 않습니다. 예를 들어 10,000은 지원되지 않고 10000은 지원됩니다.

  • 마지막 줄의 설명 문자는 지원되지 않습니다.

  • 파일 끝의 빈 줄은 처리되지 않습니다.

  • 다음과 같은 필터는 Amazon S3로 푸시다운되지 않습니다.

    • COUNT()SUM() 등의 집계 함수

    • 속성에 대해 CAST()를 사용하는 필터링 예: CAST(stringColumn as INT) = 1.

    • 객체이거나 복잡한 속성을 가진 필터 예: intArray[1] = 1, objectColumn.objectNumber = 1.

    • 값이 리터럴 값이 아닌 필터 예제: intColumn1 = intColumn2

    • 문서화된 제한 사항으로 S3 Select 지원 데이터 형식만 지원됩니다.

코드에서 S3 Select 지정

다음 예제는 Scala,SQL, R 및 CSV PySpark 를 사용하기 위해 S3 Select를 지정하는 방법을 보여줍니다. S3 Select for도 같은 방식으로 사용할 수 있습니다. JSON 옵션 목록, 기본값 및 제한 사항을 보려면 옵션 단원을 참조하십시오.

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")

옵션

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

S3select가 포함된 옵션 CSV

옵션 기본값 사용량

compression

"none"

압축 사용 여부를 나타냅니다. "none" 외에도 "gzip"만 지원됩니다.

delimiter

","

필드 구분 기호를 지정합니다.

quote

'\"'

따옴표 문자를 지정합니다. 빈 문자열을 지정하는 것은 지원되지 않으며 잘못된 XML 형식의 오류가 발생합니다.

escape

'\\'

이스케이프 문자를 지정합니다.

header

"false"

"false" 는 헤더가 없음을 나타냅니다. "true"는 헤더가 첫 번째 줄에 있음을 나타냅니다. 첫 번째 줄의 헤더만 지원되며 헤더 앞의 빈 줄은 지원되지 않습니다.

설명

"#"

설명 문자를 지정합니다. 설명 표시기는 비활성화할 수 없습니다. 즉, \u0000의 값은 지원되지 않습니다.

nullValue

""

S3select를 사용하는 옵션 JSON

옵션 기본값 사용량

compression

"none"

압축 사용 여부를 나타냅니다. "none" 외에도 "gzip"만 지원됩니다.

multiline

"false"

"false"가 S3 Select LINES 형식임을 지정합니다. 즉, 입력 데이터의 각 줄에 단일 JSON 객체가 포함됩니다. JSON "true"JSON가 S3 Select DOCUMENT 형식임을 지정합니다. 즉, JSON 객체가 입력 데이터에서 여러 줄에 걸쳐 있을 수 있습니다.