

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar um cluster do Delta Lake com o Spark
<a name="Deltausing-cluster-spark"></a>

A partir da versão 6.9.0 do Amazon EMR, é possível usar o Delta Lake com seu cluster do Spark sem a necessidade de ações de bootstrap. Nas versões 6.8.0 e anteriores do Amazon EMR, é possível usar ações de bootstrap para pré-instalar as dependências necessárias. 

Os exemplos a seguir usam o AWS CLI para trabalhar com o Delta Lake em um cluster do Amazon EMR Spark. 

Para usar o Delta Lake no Amazon EMR com o AWS Command Line Interface, primeiro crie um cluster. Para obter informações sobre como especificar a classificação Delta Lake com AWS Command Line Interface, consulte [Forneça uma configuração usando o AWS Command Line Interface ao criar um cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) ou [Forneça uma configuração com o Java SDK ao criar um cluster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

1. Crie um arquivo `configurations.json`, com o seguinte conteúdo:

   ```
   [{"Classification":"delta-defaults",  "Properties":{"delta.enabled":"true"} }]
   ```

1. Crie um cluster com a configuração a seguir, substituindo o **bucket path** do Amazon S3 de exemplo e a **subnet ID** por suas informações.

   ```
   aws emr create-cluster 
        --release-label  emr-6.9.0  
        --applications Name=Spark  
        --configurations file://delta_configurations.json   
        --region us-east-1  
        --name My_Spark_Delta_Cluster  
        --log-uri  s3://amzn-s3-demo-bucket/  
        --instance-type m5.xlarge  
        --instance-count 2   
        --service-role EMR_DefaultRole_V2  
        --ec2-attributes  InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0
   ```

   Como alternativa, é possível criar um cluster do Amazon EMR e uma aplicação Spark com os seguintes arquivos como dependências JAR em um trabalho do Spark:

   ```
   /usr/share/aws/delta/lib/delta-core.jar,
   /usr/share/aws/delta/lib/delta-storage.jar,    
   /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar
   ```
**nota**  
Se você usa o Amazon EMR versões 7.0.0 ou superiores, use `/usr/share/aws/delta/lib/delta-spark.jar` em vez de. `/usr/share/aws/delta/lib/delta-core.jar`

   Para obter mais informações, consulte [Submitting Applications](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications).

   Para incluir uma dependência de jar no trabalho do Spark, é possível adicionar as seguintes propriedades de configuração à aplicação Spark:

   ```
   --conf “spark.jars=/usr/share/aws/delta/lib/delta-core.jar,
        /usr/share/aws/delta/lib/delta-storage.jar,
        /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar"
   ```

   Para obter mais informações sobre as dependências de trabalhos do Spark, consulte [Dependency Management](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management).

   Se você usa o Amazon EMR versões 7.0.0 ou superiores, adicione a configuração em vez disso. `/usr/share/aws/delta/lib/delta-spark.jar`

   ```
   --conf “spark.jars=/usr/share/aws/delta/lib/delta-spark.jar,
        /usr/share/aws/delta/lib/delta-storage.jar,
        /usr/share/aws/delta/lib/delta-storage-s3-dynamodb.jar"
   ```

## Inicializar uma sessão do Spark para Delta Lake
<a name="Deltainitialize-spark-session"></a>

Os exemplos a seguir mostram como iniciar o shell interativo do Spark, usar o envio do Spark ou usar os Cadernos do Amazon EMR para trabalhar com o Delta Lake no Amazon EMR.

------
#### [ spark-shell ]

1. Conectar-se ao nó primário usando SSH. Para obter mais informações, consulte [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

1. Digite o seguinte comando para iniciar o shell do Spark. Para usar a PySpark concha, `spark-shell` substitua por`pyspark`.

   ```
   spark-shell \
      --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \
      --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
   ```

   Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o Delta Lake.

   ```
   spark-shell \  
     --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \  
     --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \  
     --conf spark.sql.catalog.spark_catalog.lf.managed=true
   ```

------
#### [ spark-submit ]

1. Conectar-se ao nó primário usando SSH. Para obter mais informações, consulte [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

1. Insira o comando a seguir para iniciar a sessão do Spark no Delta Lake.

   ```
   spark-submit  
   —conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" 
   —conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"
   ```

   Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o Delta Lake.

   ```
   spark-submit \  `
   --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension 
   --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \  
   --conf spark.sql.catalog.spark_catalog.lf.managed=true
   ```

------
#### [ EMR Studio notebooks ]

Para inicializar uma sessão do Spark usando Cadernos do Amazon EMR Studio, configure a sessão do Spark usando o comando magic **%%configure** no Caderno do Amazon EMR, como no exemplo a seguir. Para obter mais informações, consulte [Use EMR Notebooks magics](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) no *Guia de gerenciamento do Amazon EMR*.

```
%%configure -f
{
  "conf": {
    "spark.sql.extensions":  "io.delta.sql.DeltaSparkSessionExtension",
     "spark.sql.catalog.spark_catalog":  "org.apache.spark.sql.delta.catalog.DeltaCatalog"
  }
}
```

Se você executa as versões 6.15.0 ou superiores do Amazon EMR, você também deve usar as configurações a seguir para utilizar o controle de acesso refinado baseado no Lake Formation com o Delta Lake.

```
%%configure -f   
{
  "conf": {
    "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension",
    "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
    "spark.sql.catalog.spark_catalog.lf.managed": "true"
  }
}
```

------

## Gravar em uma tabela do Delta Lake
<a name="Deltawrite-to-table"></a>

O exemplo a seguir mostra como criar um DataFrame e gravá-lo como um conjunto de dados do Delta Lake. O exemplo mostra como trabalhar com conjuntos de dados com o shell Spark enquanto estiver conectado ao nó primário usando SSH como usuário padrão do hadoop. 

**nota**  
Para colar exemplos de código no shell do Spark, digite :paste no prompt, cole o exemplo e pressione CTRL \$1 D.

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

O Spark inclui um shell baseado em Python, `pyspark`, que você pode usar para gerar protótipos de programas Spark gravados em Python. Assim como com `spark-shell`, invoque `pyspark` no nó primário.

```
## Create a DataFrame
data =  spark.createDataFrame([("100", "2015-01-01", "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01", "2015-01-01T12:14:58.597216Z"),
("102", "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01",  "2015-01-01T13:51:40.519832Z")],
["id", "creation_date",  "last_update_time"])

## Write a DataFrame as a Delta Lake dataset to the S3  location
spark.sql("""CREATE  TABLE IF NOT EXISTS delta_table (id string, creation_date string, 
last_update_time string)
USING delta location
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table'""");

data.writeTo("delta_table").append()
```

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

```
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.functions._
 
// Create a DataFrame
val data = Seq(("100",  "2015-01-01",  "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01",  "2015-01-01T12:14:58.597216Z"),
("102",  "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01",  "2015-01-01T13:51:40.519832Z")).toDF("id", "creation_date",  "last_update_time")

// Write a DataFrame as a Delta Lake dataset to the S3  location
spark.sql("""CREATE  TABLE IF NOT EXISTS delta_table (id string,
creation_date string,
last_update_time string)
USING delta location
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table'""");

data.write.format("delta").mode("append").saveAsTable("delta_table")
```

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

```
-- Create a Delta  Lake table with the S3 location
CREATE TABLE delta_table(id string,
creation_date string, 
last_update_time string)
USING delta LOCATION
's3://amzn-s3-demo-bucket/example-prefix/db/delta_table';

-- insert data into the table
INSERT INTO delta_table VALUES  ("100", "2015-01-01",  "2015-01-01T13:51:39.340396Z"),
("101",  "2015-01-01",  "2015-01-01T12:14:58.597216Z"),
("102",  "2015-01-01", "2015-01-01T13:51:40.417052Z"),
("103",  "2015-01-01", "2015-01-01T13:51:40.519832Z");
```

------

## Ler uma tabela do Delta Lake
<a name="Deltaread-from-table"></a>

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

```
ddf = spark.table("delta_table")
ddf.show()
```

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

```
val ddf =  spark.table("delta_table")
ddf.show()
```

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

```
SELECT * FROM delta_table;
```

------