Uso del formato Avro en AWS Glue - AWS Glue

Uso del formato Avro en AWS Glue

AWS Glue recupera datos de fuentes y escribe datos en destinos almacenados y transportados en varios formatos de datos. Si los datos se almacenan o se transportan en formato de datos Avro, este documento presenta las características disponibles para utilizar los datos en AWS Glue.

AWS Glue admite el uso del formato Avro. Este es un formato de datos basado en filas y orientado al rendimiento. Para obtener una introducción al formato por parte de la autoridad de normalización, consulte Documentación de Apache Avro 1.8.2.

Puede utilizar AWS Glue para leer archivos Avro de Amazon S3 y de orígenes de streaming, como también para escribir archivos Avro en Amazon S3. Puede leer y escribir archivos bzip2 y gzip que contengan archivos Avro de S3. Además, puede escribir deflate, snappy y xz archivos que contengan archivos Avro. Debe configurar el comportamiento de compresión en el Parámetros de conexión S3 en lugar de en la configuración que se describe en esta página.

En la siguiente tabla se muestran las operaciones comunes de AWS Glue que admiten la opción de formato Avro.

Leer Escritura Lectura de streaming Grupo de archivos pequeños Marcadores de trabajo
Compatible Soportado Compatible* No se admite Compatible

*Compatible con restricciones. Para obtener más información, consulte Notas y restricciones para orígenes de streaming de Avro.

Ejemplo: leer archivos o carpetas Avro de S3

Requisitos previos: necesitará las rutas de S3 (s3path) de las carpetas o los archivos Avro que desee leer.

Configuración: en las opciones de la función, especifique format="avro". En sus connection_options, utilice la clave paths para especificar s3path. Puede configurar la forma en que el lector interactúa con S3 en la connection_options. Para obtener más información, consulte Opciones de formato de datos para entradas y salidas de ETL en AWS Glue: Referencia de opción de conexión de Amazon S3. Puede configurar la manera en que el lector interpreta los archivos Avro en sus format_options. Para obtener más información, consulte Referencia de configuración de Avro.

El siguiente script de ETL de AWS Glue muestra el proceso de lectura de archivos o carpetas Avro de S3:

Python

Para este ejemplo, use el método 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

Para este ejemplo, use la operación 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() }

Ejemplo: escribir archivos y carpetas Avro en S3

Requisitos previos: necesitará un DataFrame inicializado (dataFrame) o DynamicFrame (dynamicFrame). También necesitará la ruta de salida S3 prevista, s3path.

Configuración: en las opciones de la función, especifique format="avro". En sus connection_options, utilice la clave paths para especificar su s3path. Puede modificar aún más la forma en que el escritor interactúa con S3 en las connection_options. Para obtener más información, consulte Opciones de formato de datos para entradas y salidas de ETL en AWS Glue: Referencia de opción de conexión de Amazon S3. Puede alterar la manera en que el escritor interpreta los archivos Avro en sus format_options. Para obtener más información, consulte Referencia de configuración de Avro.

El siguiente script de ETL de AWS Glue muestra el proceso de escritura de archivos o carpetas Avro en S3.

Python

Para este ejemplo, use el método 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

Para este ejemplo, use el método 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) } }

Referencia de configuración de Avro

Puede utilizar los siguientes valores format_options donde las bibliotecas de AWS Glue especifiquen format="avro":

  • version: especifica la versión del formato lector/escritor Apache Avro que se va a soportar. El valor predeterminado es 1.7. Puede especificar format_options={"version": “1.8”} para habilitar el tipo de lectura y escritura lógico de Avro. Para obtener más información, consulte la especificación de Apache Avro 1.7.7 y la especificación de Apache Avro 1.8.2.

    El conector de Apache Avro 1.8 admite las siguientes conversiones de tipo lógico:

Para el lector: en esta tabla, se muestra la conversión entre el tipo de datos de Avro (tipo lógico y tipo primitivo de Avro) y el tipo de datos DynamicFrame de AWS Glue para las versiones 1.7 y 1.8 del lector de Avro.

Tipo de datos de Avro:

Tipo lógico

Tipo de datos de Avro:

Tipo primitivo de Avro

Tipo de datos DynamicFrame de Glue:

Lector 1.7 de Avro

Tipo de datos DynamicFrame de Glue:

Lector 1.8 de Avro

Decimal bytes BINARIO Decimal
Decimal fijo BINARIO Decimal
Date int INT Date
Tiempo (milisegundos) int INT INT
Tiempo (microsegundos) long LONG LONG
Marca de tiempo (milisegundos) long LONG Timestamp
Marca de tiempo (microsegundos) long LONG LONG
Duración (no es un tipo lógico) fijo de 12 BINARIO BINARIO

Para el escritor: en esta tabla, se muestra la conversión entre el tipo de datos DynamicFrame de AWS Glue y el tipo de datos de Avro para las versiones 1.7 y 1.8 del escritor de Avro.

Tipo de datos DynamicFrame de AWS Glue Tipo de datos de Avro:

Escritor 1.7 de Avro

Tipo de datos de Avro:

Escritor 1.8 de Avro

Decimal Cadena decimal
Date Cadena date
Timestamp Cadena marca temporal (microsegundos)

Compatibilidad entre Avro y Spark DataFrame

Para utilizar Avro desde la API de Spark DataFrame, debe instalar el complemento Spark Avro para la versión de Spark correspondiente. La versión de Spark disponible en su trabajo está determinada por la versión de AWS Glue. Para obtener más información acerca de las versiones de Spark, consulte Versiones de AWS Glue. Apache mantiene este complemento; nosotros no ofrecemos garantías específicas de compatibilidad.

En AWS Glue 2.0 se utiliza la versión 2.4.3 del complemento Spark Avro. Puede encontrar este JAR en Maven Central, consulte org.apache.spark:spark-avro_2.12:2.4.3.

En AWS Glue 3.0 se utiliza la versión 3.1.1 del complemento Spark Avro. Puede encontrar este JAR en Maven Central, consulte org.apache.spark:spark-avro_2.12:3.1.1.

Para incluir archivos JAR adicionales en un trabajo de ETL de AWS Glue, utilice el parámetro de trabajo --extra-jars. Para obtener más información acerca de la configuración de parámetros de trabajos, consulte Uso de los parámetros de trabajo en los trabajos de AWS Glue. También puede configurar este parámetro en la AWS Management Console.