

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden Sie einen Delta-Lake-Cluster mit Spark
<a name="Deltausing-cluster-spark"></a>

Ab Amazon-EMR-Version 6.9.0 können Sie Delta Lake mit Ihrem Spark-Cluster verwenden, ohne dass Bootstrap-Aktionen erforderlich sind. Für Amazon-EMR-Versionen 6.8.0 und niedriger können Sie Bootstrap-Aktionen verwenden, um die erforderlichen Abhängigkeiten vorab zu installieren. 

In den folgenden Beispielen wird der verwendet AWS CLI , um mit Delta Lake auf einem Amazon EMR Spark-Cluster zu arbeiten. 

Um Delta Lake auf Amazon EMR mit dem zu verwenden AWS Command Line Interface, erstellen Sie zunächst einen Cluster. Informationen zur Angabe der Delta Lake-Klassifizierung mit finden Sie unter [Bereitstellen einer Konfiguration mithilfe von AWS Command Line Interface, AWS Command Line Interface wenn Sie einen Cluster erstellen oder Bereitstellen](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) [einer Konfiguration mit dem Java SDK, wenn Sie einen Cluster erstellen](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk).

1. Erstellen Sie eine Datei, `configurations.json`, mit folgendem Inhalt:

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

1. Erstellen Sie einen Cluster mit der folgenden Konfiguration und ersetzen Sie die Beispiele **bucket path** und **subnet ID** in Amazon S3 durch Ihre eigenen.

   ```
   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
   ```

   Alternativ können Sie einen Amazon-EMR-Cluster und eine Spark-Anwendung mit den folgenden Dateien als JAR-Abhängigkeiten in einem Spark-Job erstellen:

   ```
   /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
   ```
**Anmerkung**  
Wenn Sie Amazon EMR-Versionen 7.0.0 oder höher verwenden, verwenden Sie `/usr/share/aws/delta/lib/delta-spark.jar` anstelle von. `/usr/share/aws/delta/lib/delta-core.jar`

   Weitere Informationen finden Sie unter [Anwendungen einreichen](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications).

   Um eine JAR-Abhängigkeit in den Spark-Auftrag aufzunehmen, können Sie der Spark-Anwendung die folgenden Konfigurationseigenschaften hinzufügen:

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

   Weitere Informationen zu den Abhängigkeiten von Spark-Aufträgen erhalten Sie unter [Abhängigkeitsmanagement](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management).

   Wenn Sie Amazon EMR-Versionen 7.0.0 oder höher verwenden, fügen Sie stattdessen die `/usr/share/aws/delta/lib/delta-spark.jar` Konfiguration hinzu.

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

## Eine Spark-Sitzung für Delta Lake initialisieren
<a name="Deltainitialize-spark-session"></a>

Die folgenden Beispiele zeigen, wie Sie die interaktive Spark-Shell starten, Spark Submit verwenden oder Amazon EMR Notebooks verwenden, um mit Delta Lake auf Amazon EMR zu arbeiten.

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

1. Verbinden Sie sich dem Primärknoten über SSH. Weitere Informationen finden Sie unter [Stellen Sie über SSH eine Verbindung zum Primärknoten her](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) im *Verwaltungshandbuch für Amazon EMR*.

1. Geben Sie den folgenden Befehl ein, um die Spark-Shell zu starten. Um die PySpark Shell zu verwenden, ersetzen Sie durch`spark-shell`. `pyspark`

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

   Wenn Sie Amazon EMR-Versionen 6.15.0 oder höher ausführen, müssen Sie außerdem die folgenden Konfigurationen verwenden, um eine differenzierte Zugriffskontrolle auf Basis von Lake Formation mit Delta Lake zu verwenden.

   ```
   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. Verbinden Sie sich dem Primärknoten über SSH. Weitere Informationen finden Sie unter [Stellen Sie über SSH eine Verbindung zum Primärknoten her](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) im *Verwaltungshandbuch für Amazon EMR*.

1. Geben Sie den folgenden Befehl ein, um die Spark-Sitzung für Delta Lake zu starten.

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

   Wenn Sie Amazon EMR-Versionen 6.15.0 oder höher ausführen, müssen Sie außerdem die folgenden Konfigurationen verwenden, um eine differenzierte Zugriffskontrolle auf Basis von Lake Formation mit Delta Lake zu verwenden.

   ```
   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 ]

Um eine Spark-Sitzung mit Amazon-EMR-Studio-Notebooks zu initialisieren, konfigurieren Sie Ihre Spark-Sitzung mithilfe des **%%configure** magischen Befehls in Ihrem Amazon EMR Notebook, wie im folgenden Beispiel. Weitere Informationen finden Sie unter [Verwendung von EMR-Notebooks-Magics](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) im *Verwaltungshandbuch für Amazon EMR*.

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

Wenn Sie Amazon EMR-Versionen 6.15.0 oder höher ausführen, müssen Sie außerdem die folgenden Konfigurationen verwenden, um eine differenzierte Zugriffskontrolle auf Basis von Lake Formation mit Delta Lake zu verwenden.

```
%%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"
  }
}
```

------

## In eine Delta-Lake-Tabelle schreiben
<a name="Deltawrite-to-table"></a>

Das folgende Beispiel zeigt, wie Sie einen Delta Lake-Datensatz erstellen DataFrame und ihn als Delta Lake-Datensatz schreiben. Das Beispiel zeigt, wie Sie mit Datensätzen mit der Spark-Shell arbeiten, während Sie mit dem Primärknoten verbunden sind und SSH als Standard-Hadoop-Benutzer verwenden. 

**Anmerkung**  
Um Codebeispiele in die Spark-Shell einzufügen, geben Sie an der Eingabeaufforderung :paste ein, fügen das Beispiel ein und drücken dann CTRL \$1 D.

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

Spark umfasst auch eine auf Python basierende Shell, `pyspark`, mit der Sie Prototypen von in Python geschriebenen Spark-Programmen entwickeln können. Rufen Sie genau wie bei `spark-shell`, `pyspark` auf dem Primärknoten auf.

```
## 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");
```

------

## Von einer Delta-Lake-Tabelle lesen
<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;
```

------