

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

# Menggunakan format Avro di AWS Glue
<a name="aws-glue-programming-etl-format-avro-home"></a>

AWS Glue mengambil data dari sumber dan menulis data ke target yang disimpan dan diangkut dalam berbagai format data. Jika data Anda disimpan atau diangkut dalam format data Avro, dokumen ini memperkenalkan fitur yang tersedia untuk menggunakan data Anda di Glue. AWS 

AWS Glue mendukung menggunakan format Avro. Format ini adalah format data berbasis baris yang berorientasi kinerja. Untuk pengenalan format oleh otoritas standar lihat, [Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/) Dokumentasi.

Anda dapat menggunakan AWS Glue untuk membaca file Avro dari Amazon S3 dan dari sumber streaming serta menulis file Avro ke Amazon S3. Anda dapat membaca dan menulis `bzip2` dan `gzip` mengarsipkan yang berisi file Avro dari S3. Selain itu, Anda dapat menulis`deflate`,`snappy`, dan `xz` arsip yang berisi file Avro. Anda mengonfigurasi perilaku kompresi pada [Parameter koneksi S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) alih-alih dalam konfigurasi yang dibahas di halaman ini. 

Tabel berikut menunjukkan operasi AWS Glue umum mana yang mendukung opsi format Avro.


| Baca | Tulis | Streaming dibaca | Kelompokkan file kecil | Bookmark tugas | 
| --- | --- | --- | --- | --- | 
| Didukung | Didukung | Didukung \$1 | Tidak didukung | Didukung | 

\$1 Didukung dengan batasan. Untuk informasi selengkapnya, lihat [Catatan dan batasan untuk sumber streaming Avro](add-job-streaming.md#streaming-avro-notes).

## Contoh: Baca file atau folder Avro dari S3
<a name="aws-glue-programming-etl-format-avro-read"></a>

**Prasyarat:** Anda akan memerlukan jalur S3 (`s3path`) ke file atau folder Avro yang ingin Anda baca. 

**Konfigurasi:** Dalam opsi fungsi Anda, tentukan`format="avro"`. Dalam Anda`connection_options`, gunakan `paths` kunci untuk menentukan`s3path`. Anda dapat mengonfigurasi bagaimana pembaca berinteraksi dengan S3 di file. `connection_options` Untuk detailnya, lihat Opsi format data untuk input dan output ETL di Glue AWS :. [Referensi opsi koneksi Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) Anda dapat mengonfigurasi bagaimana pembaca menafsirkan file Avro di file Anda. `format_options` Untuk detailnya, lihat [Referensi Konfigurasi Avro](#aws-glue-programming-etl-format-avro-reference).

Skrip AWS Glue ETL berikut menunjukkan proses membaca file atau folder Avro dari S3: 

------
#### [ Python ]

Untuk contoh ini, gunakan metode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="avro"
)
```

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

Untuk contoh ini, gunakan operasi [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="avro",
      options=JsonOptions("""{"paths": ["s3://s3path"]}""")
    ).getDynamicFrame()
  }
```

------

## Contoh: Tulis file dan folder Avro ke S3
<a name="aws-glue-programming-etl-format-avro-write"></a>

**Prasyarat:** Anda akan memerlukan initialized DataFrame () atau ()`dataFrame`. DynamicFrame `dynamicFrame` Anda juga akan membutuhkan jalur output S3 yang Anda harapkan,`s3path`. 

**Konfigurasi:** Dalam opsi fungsi Anda, tentukan`format="avro"`. Dalam Anda`connection_options`, gunakan `paths` kunci untuk menentukan Anda`s3path`. Anda selanjutnya dapat mengubah cara penulis berinteraksi dengan S3 di. `connection_options` Untuk detailnya, lihat Opsi format data untuk input dan output ETL di Glue AWS :. [Referensi opsi koneksi Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) Anda dapat mengubah cara penulis menafsirkan file Avro di file Anda. `format_options` Untuk detailnya, lihat [Referensi Konfigurasi Avro](#aws-glue-programming-etl-format-avro-reference). 

Skrip AWS Glue ETL berikut menunjukkan proses penulisan file Avro atau folder ke S3.

------
#### [ Python ]

Untuk contoh ini, gunakan metode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    format="avro",
    connection_options={
        "path": "s3://s3path"
    }
)
```

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

Untuk contoh ini, gunakan metode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    glueContext.getSinkWithFormat(
      connectionType="s3",
      options=JsonOptions("""{"path": "s3://s3path"}"""),
      format="avro"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

------

## Referensi konfigurasi Avro
<a name="aws-glue-programming-etl-format-avro-reference"></a>

Anda dapat menggunakan `format_options` nilai-nilai berikut di mana pun pustaka AWS Glue menentukan`format="avro"`:
+ `version`- Menentukan versi reader/writer format Apache Avro untuk mendukung. Default-nya adalah "1.7". Anda dapat menentukan `format_options={"version": “1.8”}` untuk mengaktifkan jenis membaca dan menulis logis Avro. Untuk informasi lebih lanjut, lihat [Spesifikasi Apache Avro 1.7.7](https://avro.apache.org/docs/1.7.7/spec.html) dan [Spesifikasi Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/spec.html).

  Konektor Apache Avro 1.8 mendukung konversi tipe logis berikut:

Untuk pembaca: tabel ini menunjukkan konversi antara tipe data Avro (tipe logis dan tipe primitif Avro) dan tipe AWS Glue `DynamicFrame` data untuk pembaca Avro 1.7 dan 1.8.


| Tipe Data Avro: Tipe Logis | Tipe Data Avro: Jenis Primitif Avro | GlueDynamicFrame Tipe Data:Pembaca Avro 1.7 | GlueDynamicFrame Tipe Data: Pembaca Avro 1.8 | 
| --- | --- | --- | --- | 
| Decimal | byte | BINARY | Decimal | 
| Decimal | tetap | BINARY | Decimal | 
| Date | int | INT | Date | 
| Waktu (milidetik) | int | INT | INT | 
| Waktu (mikrodetik) | long | LONG | LONG | 
| Timestamp (milidetik) | long | LONG | Timestamp | 
| Timestamp (mikrodetik) | long | LONG | LONG | 
| Durasi (bukan tipe logis) | tetap 12 | BINARY | BINARY | 

Untuk penulis: tabel ini menunjukkan konversi antara tipe AWS Glue `DynamicFrame` data dan tipe data Avro untuk Avro writer 1.7 dan 1.8.


| AWS Glue`DynamicFrame`Tipe Data | Tipe Data Avro:Penulis Avro 1.7 | Tipe Data Avro:Penulis Avro 1.8 | 
| --- | --- | --- | 
| Decimal | String | decimal | 
| Date | String | tanggal | 
| Stempel waktu | String | timestamp-micros | 

## Dukungan Avro Spark DataFrame
<a name="aws-glueprogramming-etl-format-avro-dataframe-support"></a>

Untuk menggunakan Avro dari Spark DataFrame API, Anda perlu menginstal plugin Spark Avro untuk versi Spark yang sesuai. Versi Spark yang tersedia di pekerjaan Anda ditentukan oleh versi AWS Glue Anda. Untuk informasi selengkapnya tentang versi Spark, lihat[AWS Glue versi](release-notes.md). Plugin ini dikelola oleh Apache, kami tidak membuat jaminan dukungan khusus.

Di AWS Glue 2.0 - gunakan versi 2.4.3 dari plugin Spark Avro. Anda dapat menemukan JAR ini di Maven Central, lihat [org.apache.spark:spark-avro\$12. 12:2.4 .3](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Di AWS Glue 3.0 - gunakan versi 3.1.1 dari plugin Spark Avro. Anda dapat menemukan JAR ini di Maven Central, lihat [org.apache.spark:spark-avro\$12. 12:3.1 .1](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Untuk memasukkan ekstra JARs dalam pekerjaan AWS Glue ETL, gunakan parameter `--extra-jars` pekerjaan. Untuk informasi selengkapnya tentang parameter pekerjaan, lihat[Menggunakan parameter pekerjaan dalam pekerjaan AWS Glue](aws-glue-programming-etl-glue-arguments.md). Anda juga dapat mengonfigurasi parameter ini di file Konsol Manajemen AWS.