

# Apache Spark용 데이터 소스 커넥터 작업
<a name="connectors-spark"></a>

일부 Athena 데이터 소스 커넥터는 Spark DSV2 커넥터로 사용할 수 있습니다. Spark DSV2 커넥터 이름에는 `-dsv2` 접미사(예: `athena-dynamodb-dsv2`)가 있습니다.

다음은 현재 사용 가능한 DSV2 커넥터, 해당 Spark `.format()` 클래스 이름, 해당 Amazon Athena 페더레이션된 쿼리 설명서 링크입니다.


| DSV2 커넥터 | Spark .format() 클래스 이름 | 설명서 | 
| --- | --- | --- | 
| athena-cloudwatch-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.CloudwatchTableProvider | [CloudWatch](connectors-cloudwatch.md) | 
| athena-cloudwatch-metrics-dsv2 | com.amazonaws.athena.connectors.dsv2.cloudwatch.metrics.CloudwatchMetricsTableProvider | [CloudWatch 지표](connectors-cwmetrics.md) | 
| athena-aws-cmdb-dsv2 | com.amazonaws.athena.connectors.dsv2.aws.cmdb.AwsCmdbTableProvider | [CMDB](connectors-cmdb.md) | 
| athena-dynamodb-dsv2 | com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider | [DynamoDB](connectors-dynamodb.md) | 

DSV2 커넥터용 `.jar` 파일을 다운로드하려면 [Amazon Athena Query Federation DSV2](https://github.com/awslabs/aws-athena-query-federation-dsv2) GitHub 페이지를 방문하고 **Releases**, **Release {{<version>}}**, **Assets** 섹션을 참조하세요.

## Spark에 대해 jar 지정
<a name="connectors-spark-specifying-the-jar-to-spark"></a>

Spark에서 Athena DSV2 커넥터를 사용하려면 사용하는 Spark 환경에 커넥터용 `.jar` 파일을 제출합니다. 다음 섹션에서는 구체적인 사례를 설명합니다.

### Athena for Spark
<a name="connectors-spark-ate"></a>

Amazon Athena for Apache Spark에 사용자 지정 `.jar` 파일 및 사용자 지정 구성을 추가하는 방법에 대한 자세한 내용은 [Spark 속성을 사용하여 사용자 지정 구성 지정](notebooks-spark-custom-jar-cfg.md) 섹션을 참조하세요.

### 일반 Spark
<a name="connectors-spark-general"></a>

커넥터 `.jar` 파일을 Spark로 전달하려면 다음 예제와 같이 `spark-submit` 명령을 사용하고 `--jars` 옵션에 `.jar` 파일을 지정합니다.

```
spark-submit \ 
  --deploy-mode cluster \ 
  --jars https://github.com/awslabs/aws-athena-query-federation-dsv2/releases/download/{{some_version}}/athena-dynamodb-dsv2-{{some_version}}.jar
```

### Amazon EMR Spark
<a name="connectors-spark-emr"></a>

Amazon EMR에서 `--jars` 파라미터와 함께 `spark-submit` 명령을 실행하려면 Amazon EMR Spark 클러스터에 단계를 추가해야 합니다. Amazon EMR에서 `spark-submit`을 사용하는 방법에 대한 자세한 내용은 *Amazon EMR 릴리스 안내서*의 [Add a Spark step](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-submit-step.html)을 참조하세요.

### AWS Glue ETL Spark
<a name="connectors-spark-glue-etl"></a>

AWS Glue ETL의 경우 `.jar` 파일의 GitHub.com URL을 `aws glue start-job-run` 명령의 `--extra-jars` 인수로 전달할 수 있습니다. AWS Glue 설명서에는 Amazon S3 경로를 사용하며 `--extra-jars` 파라미터를 설명하지만, 파라미터는 HTTPS URL을 사용할 수도 있습니다. 자세한 내용은 *AWS Glue 개발자 안내서*의 [Job parameter reference](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html#w5aac32c13c11)를 참조하세요.

## Spark에서 커넥터 쿼리
<a name="connectors-spark-querying-the-connector"></a>

Apache Spark에서 Athena의 기존 페더레이션된 쿼리와 동일한 쿼리를 제출하려면 `spark.sql()` 함수를 사용합니다. 예를 들어 다음과 같은 Athena 쿼리를 Apache Spark에서 사용하는 경우를 가정합니다.

```
SELECT somecola, somecolb, somecolc 
FROM ddb_datasource.some_schema_or_glue_database.some_ddb_or_glue_table 
WHERE somecola > 1
```

Amazon Athena DynamoDB DSV2 커넥터를 사용하여 Spark에서 동일한 쿼리를 수행하려면 다음 코드를 사용합니다.

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load()) 
 
dynamoDf.createOrReplaceTempView("ddb_spark_table") 
 
spark.sql(''' 
SELECT somecola, somecolb, somecolc 
FROM ddb_spark_table 
WHERE somecola > 1 
''')
```

## 파라미터 지정
<a name="connectors-spark-parameters"></a>

Athena 데이터 소스 커넥터의 DSV2 버전은 해당 Athena 데이터 소스 커넥터와 동일한 파라미터를 사용합니다. 파라미터 정보는 해당 Athena 데이터 소스 커넥터의 설명서를 참조하세요.

PySpark 코드에서 다음 구문을 사용하여 파라미터를 구성합니다.

```
spark.read.option("athena.connectors.conf.{{parameter}}", "{{value}}")
```

예를 들어 다음 코드는 Amazon Athena DynamoDB 커넥터 `disable_projection_and_casing` 파라미터를 `always`로 설정합니다.

```
dynamoDf = (spark.read 
    .option("athena.connectors.schema", "some_schema_or_glue_database") 
    .option("athena.connectors.table", "some_ddb_or_glue_table") 
    .option("athena.connectors.conf.disable_projection_and_casing", "always") 
    .format("com.amazonaws.athena.connectors.dsv2.dynamodb.DDBTableProvider") 
    .load())
```