

# Usar as propriedades do Spark para especificar uma configuração personalizada
<a name="notebooks-spark-custom-jar-cfg"></a>

Ao criar ou editar uma sessão no Amazon Athena para Apache Spark, você pode usar as [propriedades do Spark](https://spark.apache.org/docs/latest/configuration.html#spark-properties) para especificar arquivos `.jar`, pacotes ou outra configuração personalizada para a sessão. Para especificar propriedades do Spark, use o console do Athena, a AWS CLI ou a API do Athena.

## Usar o console do Athena para especificar as propriedades do Spark
<a name="notebooks-spark-custom-jar-cfg-console"></a>

No console do Athena, é possível especificar as propriedades do Spark ao [criar um caderno](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook) ou [editar uma sessão atual](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details).

**Para adicionar propriedades na caixa de diálogo **Criar caderno** ou **Editar detalhes da sessão****

1. Expanda as **propriedades do Spark**.

1. Para adicionar propriedades, use a opção **Editar na tabela** ou **Editar em JSON**.
   + Para a opção **Editar na tabela**, escolha **Adicionar propriedade** para adicionar uma propriedade, ou escolha **Remover** para remover uma propriedade. Use as caixas **Chave** e **Valor** para inserir os nomes das propriedades e os respectivos valores.
     + Para adicionar um arquivo `.jar` personalizado, use a propriedade `spark.jars`.
     + Para especificar um arquivo de pacote, especifique a propriedade `spark.jars.packages`.
   + Para inserir e editar sua configuração diretamente, escolha a opção **Editar em JSON**. No editor de texto JSON, você pode executar as seguintes tarefas:
     + Escolha **Copiar** para copiar o texto JSON para a área de transferência.
     + Escolha **Limpar** para remover todo o texto do editor JSON.
     + Escolha o ícone de configurações (engrenagem) para configurar a quebra de linha ou escolha um tema de cores para o editor JSON.

### Observações
<a name="notebooks-spark-custom-jar-cfg-notes"></a>
+ É possível definir propriedades no Athena para Spark, que é o mesmo que definir as [propriedades do Spark](https://spark.apache.org/docs/latest/configuration.html#spark-properties) diretamente em um objeto [SparkConf](https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkConf.html).
+ Inicie todas as propriedades do Spark com o prefixo `spark.`. As propriedades com outros prefixos são ignoradas.
+ Nem todas as propriedades do Spark estão disponíveis para configuração personalizada no Athena. Se você enviar uma solicitação `StartSession` com uma configuração restrita, a sessão não será iniciada.
  + Não é possível usar o prefixo `spark.athena.` porque ele é reservado.

## Usar a AWS CLI ou a API do Athena para fornecer uma configuração personalizada
<a name="notebooks-spark-custom-jar-cfg-cli-or-api"></a>

Para usar a AWS CLI ou a API do Athena para fornecer sua configuração de sessão, use a ação de API [StartSession](https://docs.aws.amazon.com/athena/latest/APIReference/API_StartSession.html) ou o comando [start-session](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/athena/start-session.html) da CLI. Em sua solicitação `StartSession`, use o campo `SparkProperties` do objeto [EngineConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_EngineConfiguration.html) para passar suas informações de configuração no formato JSON. Isso iniciará uma sessão com a configuração especificada.

Para especificar propriedades personalizadas do Spark na AWS CLI, use a configuração `engine-configuration` ao iniciar uma sessão interativa.

```
aws athena start-session \ 
--region "REGION"
--work-group "WORKGROUP" \
--engine-configuration '{
    "Classifications": [{
      "Name": "spark-defaults",
      "Properties": {
        "spark.dynamicAllocation.minExecutors": "1",
        "spark.dynamicAllocation.initialExecutors": "2",
        "spark.dynamicAllocation.maxExecutors": "10",
        "spark.dynamicAllocation.executorIdleTimeout": "300"
      }
    }]
  }'
```

Você também pode especificar padrões de configuração no nível do grupo de trabalho usando a ação da API `CreateWorkgroup` ou a ação da API `UpdateWorkgroup`. Os padrões de configuração definidos no grupo de trabalho se aplicam a todas as sessões iniciadas para esse grupo de trabalho.

Para especificar as propriedades padrão do Spark na AWS CLI para um grupo de trabalho, use a configuração `engine-configuration` ao criar um novo grupo de trabalho:

```
aws athena create-work-group \
  --region "REGION" \
  --name "WORKGROUP_NAME" \
  --configuration '{
    "EngineVersion": {
      "SelectedEngineVersion": "Apache Spark version 3.5"
    },
    "ExecutionRole": "EXECUTION_ROLE",
    "EngineConfiguration": {
      "Classifications": [
        {
          "Name": "spark-defaults",
          "Properties": {
            "spark.dynamicAllocation.minExecutors": "1",
            "spark.dynamicAllocation.initialExecutors": "2",
            "spark.dynamicAllocation.maxExecutors": "10",
            "spark.dynamicAllocation.executorIdleTimeout": "300"
          }
        }
      ]
    }
  }'
```

Para modificar as propriedades padrão do Spark na AWS CLI para um grupo de trabalho, use a configuração `engine-configuration` ao atualizar um grupo de trabalho. As mudanças se aplicam às novas sessões interativas daqui em diante.

```
aws athena update-work-group \
  --region "REGION" \
  --work-group "WORKGROUP_NAME" \
  --configuration-updates '{
    "EngineVersion": {
      "SelectedEngineVersion": "Apache Spark version 3.5"
    },
    "ExecutionRole": "EXECUTION_ROLE",
    "EngineConfiguration": {
      "Classifications": [
        {
          "Name": "spark-defaults",
          "Properties": {
            "spark.dynamicAllocation.minExecutors": "1",
            "spark.dynamicAllocation.initialExecutors": "2",
            "spark.dynamicAllocation.maxExecutors": "12",
            "spark.dynamicAllocation.executorIdleTimeout": "300"
          }
        }
      ]
    }
  }'
```