AWS Glue で Avro 形式を使用する - AWS Glue

AWS Glue で Avro 形式を使用する

AWS Glue はソースからデータを取得し、さまざまなデータ形式で保存および転送されたターゲットにデータを書き込みます。このドキュメントでは、データが Avro データ形式で保存または転送される場合に、AWS Glue でデータを使用する際に利用できる機能について説明します。

AWS Glue は Avro 形式の使用をサポートしています。この形式は、パフォーマンス指向の行ベースのデータ形式です。標準局による形式の概要については、「Apache Avro 1.8.2 Documentation」(Apache Avro ドキュメント 1.8.2) を参照してください。

AWS Glue を使用して、Amazon S3 およびストリーミングソースから Avro ファイルを読み取り、Avro ファイルを Amazon S3 に書き込むことができます。S3 から、Avro ファイルが含まれる bzip2 および gzip アーカイブを読み書きすることができます。さらに、Avro ファイルが含まれる deflatesnappyxz アーカイブを書き込むこともできます。このページで説明する設定ではなく、S3 接続パラメータ 上で圧縮動作を設定します。

次の表は、Avro 形式のオプションをサポートする一般的な AWS Glue オペレーションを示しています。

読み込み 書き込み ストリーミングの読み取り 小さなファイルのグループ化 ジョブのブックマーク
サポート サポート サポート対象* サポートされていません サポート

制限付きで、* がサポートされています。詳細については、「Avro ストリーミングソースに関する注意事項と制約事項」を参照してください。

例: S3 から Avro ファイルまたはフォルダを読み取る

前提条件: 読み取る Avro ファイルまたはフォルダへの S3 パス (s3path) が必要です。

設定: 関数オプションで format="avro" を指定します。connection_options で、paths キーを使用して s3path を指定します。リーダーが S3 とやり取りする方法は、connection_options で設定できます。詳細については、AWS Glue: Amazon S3 接続のオプションのリファレンス の「ETL の入力および出力のデータ形式オプション」を参照してください。リーダーが Avro ファイルを解釈する方法は、format_options で設定できます。詳細については、Avro 設定リファレンスを参照してください。

次の AWS Glue ETL スクリプトは、S3 から Avro ファイルまたはフォルダを読み取るプロセスを示しています。

Python

この例では 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

この例では 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() }

例: Avro ファイルおよびフォルダを S3 に書き込む

前提条件: 初期化された DataFrame (dataFrame) または DynamicFrame (dynamicFrame) が必要です。また、予想される S3 出力パスである s3path も必要になります。

設定: 関数オプションで format="avro" を指定します。connection_options で、paths キーを使用して s3path を指定します。ライターが S3 と対話する方法を、connection_options でさらに詳しく変更することができます。詳細については、AWS Glue: Amazon S3 接続のオプションのリファレンス の「ETL の入力および出力のデータ形式オプション」を参照してください。リーダーが Avro ファイルを解釈する方法は、format_options で変更できます。詳細については、Avro 設定リファレンスを参照してください。

次の AWS Glue ETL スクリプトは、S3 に Avro ファイルまたはフォルダを書き込むプロセスを示しています。

Python

この例では 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

この例では 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) } }

Avro 設定リファレンス

AWS Glue ライブラリが format="avro" を指定する場合は、以下の format_options を使用することができます。

  • version – サポートする Apache Avro リーダー/ライター形式のバージョンを指定します。デフォルト値は「1.7」です。Avro 論理型の読み取りと書き込みを有効にするには、format_options={"version": “1.8”} を指定します。詳細については、「Apache Avro 1.7.7 の仕様」および「Apache Avro 1.8.2 の仕様」を参照してください。

    Apache Avro 1.8 コネクタは、次の論理型変換をサポートしています。

リーダーの場合: この表に、Avro リーダー 1.7 と 1.8 について、Avro データ型 (論理型と Avro プリミティブ型) と AWS GlueDynamicFrame データ型の間での型変換を示します。

Avro データ型:

論理型

Avro データ型:

Avro プリミティブ型

GlueDynamicFrame データ型:

Avro リーダー 1.7

GlueDynamicFrame データ型:

Avro リーダー 1.8

10 進数 bytes BINARY 10 進数
10 進数 固定 BINARY 10 進数
日付 整数 INT 日付
時間 (ミリ秒) 整数 INT INT
時間 (マイクロ秒) long LONG LONG
タイムスタンプ (ミリ秒) long LONG タイムスタンプ
タイムスタンプ (マイクロ秒) long LONG LONG
所要時間 (論理型ではない) 12 で固定 BINARY BINARY

ライターの場合: この表に、Avro ライター 1.7 と 1.8 について、データ型と Avro データ型 AWS GlueDynamicFrame の間での型変換を示します。

AWS GlueDynamicFrame データ型 Avro データ型:

Avro ライター 1.7

Avro データ型:

Avro タイター 1.8

10 進数 文字列 decimal
日付 文字列 date
タイムスタンプ 文字列 timestamp-micros

Avro Spark DataFrame サポート

Spark DataFrame API から Avro を使用するには、対応する Spark のバージョン用の Spark Avro プラグインをインストールする必要があります。ジョブで使用できる Spark のバージョンは、AWS Glue のバージョンによって決まります。Spark のバージョンの詳細については、「AWS Glue バージョン」を参照してください。このプラグインは Apache によって管理されており、特定のサポートを保証するものではありません。

AWS Glue 2.0 - Spark Avro プラグインのバージョン 2.4.3 を使用します。この JAR は Maven Central にあります。org.apache.spark:spark-avro_2.12:2.4.3 を参照してください。

AWS Glue 3.0 - Spark Avro プラグインのバージョン 3.1.1 を使用します。この JAR は Maven Central にあります。org.apache.spark:spark-avro_2.12:3.1.1 を参照してください。

AWS Glue の ETL ジョブに追加の JAR を含めるには、--extra-jars ジョブパラメータを使用します。ジョブパラメータについては、「AWS Glue ジョブでジョブパラメータを使用する」を参照してください。AWS Management Console で、このパラメータを設定することもできます。