

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Gunakan cluster Delta Lake dengan Spark
<a name="Deltausing-cluster-spark"></a>

Dimulai dengan Amazon EMR versi 6.9.0, Anda dapat menggunakan Delta Lake dengan cluster Spark Anda tanpa perlu tindakan bootstrap. Untuk Amazon EMR rilis 6.8.0 dan yang lebih rendah, Anda dapat menggunakan tindakan bootstrap untuk pra-instal dependensi yang diperlukan. 

Contoh berikut menggunakan AWS CLI untuk bekerja dengan Delta Lake pada cluster Amazon EMR Spark. 

Untuk menggunakan Delta Lake di Amazon EMR dengan, AWS Command Line Interface pertama buat cluster. Untuk informasi tentang cara menentukan klasifikasi Delta Lake AWS Command Line Interface, lihat [Menyediakan konfigurasi menggunakan AWS Command Line Interface saat Anda membuat klaster](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-cli) atau [Menyediakan konfigurasi dengan Java SDK saat Anda membuat](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-create-cluster.html#emr-configure-apps-create-cluster-sdk) klaster.

1. Buat file, `configurations.json`, dengan konten berikut:

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

1. Buat cluster dengan konfigurasi berikut, ganti contoh Amazon S3 **bucket path** dan **subnet ID** dengan milik Anda sendiri.

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

   Atau, Anda dapat membuat cluster EMR Amazon dan aplikasi Spark dengan file berikut sebagai dependensi JAR dalam pekerjaan 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
   ```
**catatan**  
Jika Anda menggunakan Amazon EMR rilis 7.0.0 atau lebih tinggi, gunakan sebagai gantinya. `/usr/share/aws/delta/lib/delta-spark.jar` `/usr/share/aws/delta/lib/delta-core.jar`

   Untuk informasi selengkapnya, lihat [Mengirimkan Aplikasi.](https://spark.apache.org/docs/latest/submitting-applications.html#submitting-applications)

   Untuk menyertakan dependensi jar dalam pekerjaan Spark, Anda dapat menambahkan properti konfigurasi berikut ke aplikasi 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"
   ```

   [Untuk informasi selengkapnya tentang dependensi pekerjaan Spark, lihat Manajemen Ketergantungan.](https://spark.apache.org/docs/latest/running-on-kubernetes.html#dependency-management)

   Jika Anda menggunakan Amazon EMR rilis 7.0.0 atau lebih tinggi, tambahkan konfigurasi sebagai gantinya. `/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"
   ```

## Inisialisasi sesi Spark untuk Delta Lake
<a name="Deltainitialize-spark-session"></a>

Contoh berikut menunjukkan cara meluncurkan shell Spark interaktif, menggunakan Spark submit, atau menggunakan Amazon EMR Notebooks untuk bekerja dengan Delta Lake di Amazon EMR.

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

1. Connect ke node utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke node utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Amazon EMR Management Guide*.

1. Masukkan perintah berikut untuk meluncurkan shell Spark. Untuk menggunakan PySpark shell, ganti `spark-shell` dengan`pyspark`.

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

   Jika Anda menjalankan Amazon EMR rilis 6.15.0 atau lebih tinggi, Anda juga harus menggunakan konfigurasi berikut untuk menggunakan kontrol akses berbutir halus berdasarkan Lake Formation dengan 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. Connect ke node utama menggunakan SSH. Untuk informasi selengkapnya, lihat [Connect ke node utama menggunakan SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) di *Amazon EMR Management Guide*.

1. Masukkan perintah berikut untuk meluncurkan sesi Spark untuk 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"
   ```

   Jika Anda menjalankan Amazon EMR rilis 6.15.0 atau lebih tinggi, Anda juga harus menggunakan konfigurasi berikut untuk menggunakan kontrol akses berbutir halus berdasarkan Lake Formation dengan 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 ]

Untuk menginisialisasi sesi Spark menggunakan notebook Amazon EMR Studio, konfigurasikan sesi Spark Anda menggunakan perintah ajaib **%%configure** di notebook Amazon EMR Anda, seperti pada contoh berikut. Untuk informasi selengkapnya, lihat [Menggunakan sihir EMR Notebooks](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-studio-magics.html#emr-magics) di Panduan Manajemen *Amazon* EMR.

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

Jika Anda menjalankan Amazon EMR rilis 6.15.0 atau lebih tinggi, Anda juga harus menggunakan konfigurasi berikut untuk menggunakan kontrol akses berbutir halus berdasarkan Lake Formation dengan 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"
  }
}
```

------

## Menulis ke meja Delta Lake
<a name="Deltawrite-to-table"></a>

Contoh berikut menunjukkan cara membuat DataFrame dan menulisnya sebagai dataset Delta Lake. Contoh menunjukkan cara bekerja dengan dataset dengan shell Spark saat terhubung ke node utama menggunakan SSH sebagai pengguna hadoop default. 

**catatan**  
Untuk menempelkan sampel kode ke dalam shell Spark, ketik :paste pada prompt, tempel contoh, lalu tekanCTRL \$1 D.

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

Spark menyertakan shell berbasis Python`pyspark`,, yang dapat Anda gunakan untuk membuat prototipe program Spark yang ditulis dengan Python. Sama seperti`spark-shell`, panggil `pyspark` pada simpul utama.

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

------

## Baca dari meja Danau Delta
<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;
```

------