Menggunakan format Avro di AWS Glue - AWS Glue

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

AWSGlue 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

AWSGlue 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 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 menulisdeflate,snappy, dan xz arsip yang berisi file Avro. Anda mengonfigurasi perilaku kompresi pada Parameter koneksi 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 * Tidak didukung Didukung

* Didukung dengan batasan. Untuk informasi selengkapnya, lihat Catatan dan batasan untuk sumber streaming Avro.

Contoh: Baca file atau folder Avro dari S3

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

Konfigurasi: Dalam opsi fungsi Anda, tentukanformat="avro". Dalam Andaconnection_options, gunakan paths kunci untuk menentukans3path. Anda dapat mengonfigurasi bagaimana pembaca berinteraksi dengan S3 di file. connection_options Untuk detailnya, lihat Opsi format data untuk input dan output ETL di GlueAWS:. Referensi opsi koneksi Amazon S3 Anda dapat mengonfigurasi bagaimana pembaca menafsirkan file Avro di file Anda. format_options Untuk detailnya, lihat Referensi Konfigurasi Avro.

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

Python

Untuk contoh ini, gunakan metode 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.

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

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, tentukanformat="avro". Dalam Andaconnection_options, gunakan paths kunci untuk menentukan Andas3path. Anda selanjutnya dapat mengubah cara penulis berinteraksi dengan S3 di. connection_options Untuk detailnya, lihat Opsi format data untuk input dan output ETL di GlueAWS:. Referensi opsi koneksi Amazon S3 Anda dapat mengubah cara penulis menafsirkan file Avro di file Anda. format_options Untuk detailnya, lihat Referensi Konfigurasi Avro.

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

Python

Untuk contoh ini, gunakan metode 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.

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

Anda dapat menggunakan format_options nilai-nilai berikut di mana pun pustaka AWS Glue menentukanformat="avro":

  • version — Menentukan versi format pembaca/penulis Apache Avro yang didukung. 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 dan Spesifikasi Apache Avro 1.8.2.

    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 BINER Decimal
Decimal tetap BINER Decimal
Tanggal int INT Tanggal
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 BINER BINER

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 GlueDynamicFrameTipe Data Tipe Data Avro:

Penulis Avro 1.7

Tipe Data Avro:

Penulis Avro 1.8

Decimal String decimal
Tanggal String tanggal
Timestamp String timestamp-micros

Dukungan Avro Spark DataFrame

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, lihatAWS Glue versi. 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_2. 12:2.4 .3.

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_2. 12:3.1 .1.

Untuk memasukkan JAR tambahan dalam pekerjaan AWS Glue ETL, gunakan parameter --extra-jars pekerjaan. Untuk informasi selengkapnya tentang parameter pekerjaan, lihatMenggunakan parameter pekerjaan dalam pekerjaan AWS Glue. Anda juga dapat mengonfigurasi parameter ini di fileAWS Management Console.