Verwenden des Parquet-Formats in AWS-Glue - AWS Glue

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden des Parquet-Formats in AWS-Glue

AWS-Glue ruft Daten aus Quellen ab und schreibt Daten an Ziele, die in verschiedenen Datenformaten gespeichert und transportiert werden. Wenn Ihre Daten im Parquet-Datenformat gespeichert oder transportiert werden, stellt Ihnen dieses Dokument die verfügbaren Features zur Verwendung Ihrer Daten in AWS-Glue vor.

AWS-Glue unterstützt die Verwendung des Parquet-Formats. Dieses Format ist ein leistungsorientiertes, spaltenbasiertes Datenformat. Eine Einführung in das Format durch die Standardautorität finden Sie unter Dokumentationsübersicht zu Apache-Parquet.

Sie können AWS-Glue verwenden, um Parquet-Dateien aus Amazon S3 und aus Streaming-Quellen zu lesen und um Parquet-Dateien in Amazon S3 zu schreiben. Sie können bzip- und gzip-Archive mit Parquet-Dateien aus S3 lesen und schreiben. Sie konfigurieren das Komprimierungsverhalten auf S3-Verbindungsparameter statt in der auf dieser Seite besprochenen Konfiguration.

Die folgende Tabelle zeigt, welche gängigen AWS-Glue-Features die Parquet-Formatoption unterstützen.

Lesen Write (Schreiben) Streaming gelesen Gruppieren von kleinen Dateien Auftrags-Lesezeichen
Unterstützt Unterstützt Unterstützt Nicht unterstützt Unterstützt*

* Unterstützt in AWS-Glue-Version 1.0+

Beispiel: Lesen von Parquet-Dateien oder -Ordnern aus S3

Voraussetzungen: Sie benötigen die S3-Pfade (s3path) zu den Parquet-Dateien oder -Ordnern, die Sie lesen möchten.

Konfiguration: Geben Sie in Ihren Funktionsoptionen format="parquet" an. Verwenden Sie in Ihrem connection_options den paths-Schlüssel, um Ihren s3path anzugeben.

Sie können konfigurieren, wie der Reader mit S3 in der connection_options interagiert. Einzelheiten finden Sie unter Verbindungstypen und Optionen für ETL in AWS Glue: S3-Verbindungsparameter.

Sie können konfigurieren, wie der Reader Parquet-Dateien in Ihrem format_options interpretiert. Details dazu finden Sie unter Parquet-Konfigurationsreferenz.

Das folgende AWS-Glue-ETL-Skript zeigt den Prozess des Lesens von Parquet-Dateien oder -Ordnern aus S3:

Python

Verwenden Sie für dieses Beispiel die Methode 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" )

Sie können DataFrames auch in einem Skript verwenden (pyspark.sql.DataFrame).

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

Verwenden Sie für dieses Beispiel die Methode 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() } }

Sie können DataFrames auch in einem Skript verwenden (org.apache.spark.sql.DataFrame).

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

Beispiel: Schreiben von Parquet-Dateien und -Ordnern nach S3

Voraussetzungen: Sie benötigen einen initialisierten DataFrame (dataFrame) oder DynamicFrame (dynamicFrame). Sie benötigen auch Ihren erwarteten S3-Ausgabepfad, s3path.

Konfiguration: Geben Sie in Ihren Funktionsoptionen format="parquet" an. Verwenden Sie in Ihrem connection_options den paths-Schlüssel, um s3path anzugeben.

Sie können die Art und Weise, wie der Writer mit S3 in connection_options interagiert, weiter verändern. Einzelheiten finden Sie unter Verbindungstypen und Optionen für ETL in AWS Glue: S3-Verbindungsparameter. Sie können konfigurieren, wie Ihre Operation den Inhalt Ihrer Dateien in format_options schreibt. Details dazu finden Sie unter Parquet-Konfigurationsreferenz.

Das folgende AWS-Glue-ETL-Skript zeigt den Prozess des Schreibens von Parquet-Dateien und -Ordnern in S3.

Wir bieten einen benutzerdefinierten Parquet-Writer mit Leistungsoptimierungen für DynamicFrames über den useGlueParquetWriter-Konfigurationsschlüssel. Um festzustellen, ob dieser Writer für Ihren Workload geeignet ist, lesen Sie Glue-Parquet-Writer.

Python

Verwenden Sie für dieses Beispiel die Methode 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, }, )

Sie können DataFrames auch in einem Skript verwenden (pyspark.sql.DataFrame).

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

Wählen Sie für dieses Beispiel die Methode 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) } }

Sie können DataFrames auch in einem Skript verwenden (org.apache.spark.sql.DataFrame).

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

Parquet-Konfigurationsreferenz

Sie können die folgenden format_options überall verwenden, wo AWS-Glue-Bibliotheken format="parquet" angibt:

  • useGlueParquetWriter – Gibt die Verwendung eines benutzerdefinierten Parquet-Writers an, der über Leistungsoptimierungen für DynamicFrame-Workflows verfügt. Einzelheiten zur Verwendung finden Sie unter Glue-Parquet-Writer.

    • Typ: Boolesch, Standard:false

  • compression – Gibt den verwendeten Komprimierungs-Codec an. Werte sind voll kompatibel mit org.apache.parquet.hadoop.metadata.CompressionCodecName.

    • Typ: Aufzählungstext, Standard: "snappy"

    • Werte: "uncompressed", "snappy", "gzip" und "lzo"

  • blockSize – Gibt die Größe einer im Arbeitsspeicher gepufferten Zeilengruppe in Bytes an. Sie verwenden dies, um die Leistung zu optimieren. Die Größe sollte sich genau in eine Anzahl von Megabyte teilen.

    • Typ: Numerisch, Standard:134217728

    • Der Standardwert ist gleich 128 MB.

  • pageSize – Gibt die Größe einer Seite in Byte an. Sie verwenden dies, um die Leistung zu optimieren. Eine Seite ist die kleinste Einheit, die vollständig gelesen werden muss, um auf einen einzelnen Datensatz zugreifen zu können.

    • Typ: Numerisch, Standard:1048576

    • Der Standardwert ist gleich 1 MB.

Anmerkung

Es können zusätzlich alle Optionen, die vom zugrunde liegenden SparkSQL-Code akzeptiert werden, im Rahmen des connection_options-Map-Parameters in dieses Format übergeben werden. Zum Beispiel kann eine Spark-Konfiguration wie mergeSchema für den AWS Glue Spark-Reader so eingestellt werden, dass das Schema für alle Dateien zusammengeführt wird.

Optimieren der Schreibleistung mit AWS-Glue-Parquet-Writer

Anmerkung

Der Zugriff auf den AWS-Glue-Parquet-Writer erfolgte in der Vergangenheit über den glueparquet-Formattyp. Dieses Zugriffsmuster wird nicht mehr befürwortet. Verwenden Sie stattdessen den parquet-Typ mit aktiviertem useGlueParquetWriter.

Der AWS-Glue-Parquet-Writer verfügt über Leistungsverbesserungen, die ein schnelleres Schreiben von Parquet-Dateien ermöglichen. Der traditionelle Writer berechnet vor dem Schreiben ein Schema. Das Parquet-Format speichert das Schema nicht in einer schnell abrufbaren Form, daher kann dies einige Zeit dauern. Mit dem AWS-Glue-Parquet-Writer ist ein vorab berechnetes Schema nicht erforderlich. Der Writer berechnet und modifiziert das Schema dynamisch, sobald Daten eingehen.

Beachten Sie die folgenden Einschränkungen, wenn Sie useGlueParquetWriter angeben:

  • Der Writer unterstützt nur die Schemaentwicklung (z. B. das Hinzufügen oder Entfernen von Spalten), aber nicht das Ändern von Spaltentypen, wie bei ResolveChoice.

  • Der Writer unterstützt nicht das Schreiben von leeren DataFrames – zum Beispiel, um eine reine Schema-Datei zu schreiben. Bei der Integration mit dem AWS Glue Data Catalog durch die Einstellung enableUpdateCatalog=True wird der Datenkatalog nicht aktualisiert, wenn Sie versuchen, einen leeren DataFrame zu schreiben. Dies führt dazu, dass im Datenkatalog eine Tabelle ohne Schema erstellt wird.

Wenn Ihre Transformation diese Einschränkungen nicht erfordert, sollte das Aktivieren des AWS-Glue-Parquet-Writers die Leistung steigern.