Uso do formato Parquet no AWS Glue - AWS Glue

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Uso do formato Parquet no AWS Glue

O AWS Glue recupera dados de fontes e grava dados em destinos armazenados e transportados em vários formatos de dados. Se seus dados forem armazenados ou transportados no formato de dados Parquet, este documento apresenta os recursos disponíveis para usar seus dados no AWS Glue.

O AWS Glue é compatível com o uso do formato Parquet. Esse formato é um formato de dados orientado a desempenho e baseado em colunas. Para uma apresentação do formato feita pela autoridade padrão, consulte Apache Parquet Documentation Overview (Visão geral da documentação do Apache Parquet).

Você pode usar o AWS Glue para ler arquivos Parquet do Amazon S3 e de fontes de transmissão, bem como para gravar arquivos Parquet no Amazon S3. Você pode ler e gravar arquivos bzip e gzip do S3 que contenham arquivos Parquet. Você configura o comportamento de compactação no Parâmetros de conexão do S3 e não na configuração apresentada nesta página.

A tabela a seguir mostra quais são os recursos comuns do AWS Glue compatíveis com a opção de formato Parquet.

Leitura Escrever Leitura de transmissão Agrupar arquivos pequenos Marcadores de trabalho
Compatível Compatível Compatível Sem suporte Compatível*

*Compatível com o AWS Glue versão 1.0+

Exemplo: ler arquivos ou pastas Parquet do S3

Pré-requisitos: você precisará dos caminhos do S3 (s3path) para os arquivos ou pastas Parquet que deseja ler.

Configuração: nas opções da sua função, especifique format="parquet". Em seu connection_options, use a chave paths para especificar seu s3path.

Você pode configurar como o leitor interage com o S3 no connection_options. Para mais detalhes, consulte os tipos de conexão e opções para ETL no AWS Glue: Parâmetros de conexão do S3.

Você pode configurar como o leitor interpreta os arquivos Parquet em seu format_options. Para obter mais detalhes, consulte Parquet Configuration Reference (Referência de configuração de Parquet).

O seguinte script de ETL do AWS Glue mostra o processo de leitura de arquivos ou pastas Parquet provenientes do S3:

Python

Neste exemplo, use o método create_dynamic_frame.from_options.

# Example: Read Parquet from S3 from pyspark.context import SparkContext from awsglue.context import GlueContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) spark = glueContext.spark_session dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type = "s3", connection_options = {"paths": ["s3://s3path/"]}, format = "parquet" )

Você também pode usar DataFrames em um script (pyspark.sql.DataFrame).

dataFrame = spark.read.parquet("s3://s3path/")
Scala

Neste exemplo, use o método getSourceWithFormat.

// Example: Read Parquet from S3 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) val dynamicFrame = glueContext.getSourceWithFormat( connectionType="s3", format="parquet", options=JsonOptions("""{"paths": ["s3://s3path"]}""") ).getDynamicFrame() } }

Você também pode usar DataFrames em um script (org.apache.spark.sql.DataFrame).

spark.read.parquet("s3://s3path/")

Exemplo: gravar arquivos e pastas Parquet no S3

Pré-requisitos: você precisará de um DataFrame (dataFrame) ou de um DynamicFrame (dynamicFrame) inicializado. Você também precisará do caminho de saída esperado do S3, s3path.

Configuração: nas opções da sua função, especifique format="parquet". Em seu connection_options, use a chave paths para especificar s3path.

Em connection_options, você pode alterar ainda mais a forma como o gravador interage com o S3. Para mais detalhes, consulte os tipos de conexão e opções para ETL no AWS Glue: Parâmetros de conexão do S3. Você pode configurar como sua operação grava o conteúdo de seus arquivos no format_options. Para obter mais detalhes, consulte Parquet Configuration Reference (Referência de configuração de Parquet).

O seguinte script de ETL do AWS Glue mostra o processo de gravação de arquivos e pastas Parquet no S3.

Fornecemos um gravador personalizado de Parquet com otimizações de desempenho para DynamicFrames, por meio da chave de configuração useGlueParquetWriter. Para determinar se esse gravador é adequado para sua workload, consulte Glue Parquet Writer (Gravador Parquet do Glue).

Python

Neste exemplo, use o método write_dynamic_frame.from_options.

# Example: Write Parquet to S3 # Consider whether useGlueParquetWriter is right for your workflow. 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="parquet", connection_options={ "path": "s3://s3path", }, format_options={ # "useGlueParquetWriter": True, }, )

Você também pode usar DataFrames em um script (pyspark.sql.DataFrame).

df.write.parquet("s3://s3path/")
Scala

Neste exemplo, use o método getSinkWithFormat.

// Example: Write Parquet to S3 // Consider whether useGlueParquetWriter is right for your workflow. 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="parquet" ).writeDynamicFrame(dynamicFrame) } }

Você também pode usar DataFrames em um script (org.apache.spark.sql.DataFrame).

df.write.parquet("s3://s3path/")

Referência de configuração do Parquet

Você pode usar o seguinte format_options sempre que as bibliotecas do AWS Glue especificarem format="parquet":

  • useGlueParquetWriter: especifica o uso de um gravador de Parquet personalizado com otimizações de desempenho para fluxos de trabalho DynamicFrame. Para obter mais detalhes sobre o uso, consulte Glue Parquet Writer (Gravador Parquet do Glue).

    • Tipo: booliano, padrão:false

  • compression: especifica o codec de compactação usado. Os valores são totalmente compatíveis com org.apache.parquet.hadoop.metadata.CompressionCodecName.

    • Tipo: texto enumerado, padrão: "snappy"

    • Valores: "uncompressed", "snappy", "gzip" e "lzo"

  • blockSize: especifica em bytes o tamanho de um grupo de linhas que está sendo armazenado em memória. Você usa isso para ajustar o desempenho. O tamanho deve ser dividido exatamente em um número de megabytes.

    • Digite: numérico, padrão:134217728

    • O valor padrão é igual a 128 MB.

  • pageSize: especifica o tamanho de uma página em bytes. Você usa isso para ajustar o desempenho. Uma página é a menor unidade que deve ser totalmente lida para acessar um único registro.

    • Digite: numérico, padrão:1048576

    • O valor padrão é igual a 1 MB.

nota

E ainda, quaisquer opções aceitas pelo código SparkSQL subjacente podem ser transmitidas para ele por meio do parâmetro de mapa connection_options. Por exemplo, é possível definir uma configuração do Spark, como mergeSchema, para o leitor de Spark do AWS Glue mesclar o esquema para todos os arquivos.

Otimizar o desempenho de gravação com o gravador de Parquet do AWS Glue

nota

Historicamente, o gravador de Parquet do AWS Glue tem sido acessado por meio do tipo de formato glueparquet. Esse padrão de acesso não é mais promovido. Em vez disso, use o tipo parquet com useGlueParquetWriter habilitado.

O gravador de Parquet do AWS Glue tem aprimoramentos de desempenho que permitem gravações mais rápidas de arquivos Parquet. O gravador tradicional calcula um esquema antes da gravação. O formato Parquet não armazena o esquema de uma maneira rapidamente recuperável, então isso pode levar algum tempo. Com o gravador de Parquet do AWS Glue, não é necessário usar um esquema pré-calculado. O gravador calcula e modifica o esquema dinamicamente conforme recebe os dados.

Ao especificar useGlueParquetWriter, observe as seguintes limitações:

  • O gravador oferece só é compatível com evolução do esquema (p. ex., adicionar ou remover colunas), mas não com a alteração de tipos de coluna, como com ResolveChoice.

  • O gravador não oferece suporte à gravação de DataFrames vazios; por exemplo, para gravar um arquivo somente de esquema. Ao realizar a integração com o Catálogo de Dados da AWS ao configurar enableUpdateCatalog=True, a tentativa de gravar um DataFrame vazio não atualizará o Catálogo de Dados. Isso resultará na criação de uma tabela no Catálogo de Dados sem esquema.

Se sua transformação não exigir essas limitações, a ativação do gravador Parquet do AWS Glue deverá aumentar o desempenho.