Utilisation du format CSV dans AWS Glue - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation du format CSV dans AWS Glue

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données CSV, ce document présente les fonctionnalités disponibles pour l'utilisation de vos données dans AWS Glue.

AWS Glue prend en charge le format CSV (valeurs séparées par des virgules). Ce format est un format de données minimal basé sur des lignes. Les CSV ne sont souvent pas strictement conformes à une norme, mais vous pouvez vous référer à RFC 4180 et RFC 7111 pour en savoir plus.

Vous pouvez utiliser AWS Glue pour lire des CSV depuis Amazon S3 et depuis des sources de streaming, ainsi que pour écrire des CSV sur Amazon S3. Vous pouvez lire et écrire des archives bzip et gzip contenant des fichiers CSV provenant de S3. Vous configurez le comportement de compression sur Paramètres de connexion S3 plutôt que dans la configuration décrite sur cette page.

Le tableau suivant indique les fonctionnalités courantes de AWS Glue qui prennent en charge l'option de format CSV.

Lire Écrire Lecture en streaming Groupement des petits fichiers Signets de tâche
Pris en charge Pris en charge Pris en charge Pris en charge Pris en charge

Exemple : lecture de fichiers ou de dossiers CSV depuis S3

Prérequis : vous aurez besoin des chemins S3 (s3path) vers des fichiers ou dossiers CSV que vous souhaitez lire.

Configuration : dans vos options de fonction, spécifiez format="csv". Dans vos connection_options, utilisez la clé paths pour spécifier s3path. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans connection_options. Pour plus d'informations, consultez les Types et options de connexion pour ETL dans AWS Glue : Paramètres de connexion S3. Vous pouvez configurer la manière dont le lecteur interprète les fichiers CSV dans votre format_options. Pour plus d'informations, consultez CSV Configuration Reference (Référence de configuration CSV).

Le script ETL AWS Glue suivant montre le processus de lecture de fichiers ou dossiers CSV à partir de S3.

Nous fournissons un lecteur CSV personnalisé avec des optimisations de performances pour les flux de travail courants à travers la clé de configuration optimizePerformance. Pour déterminer si ce lecteur est adapté à votre charge de travail, consultez Optimiser les performances de lecture avec un lecteur CSV SIMD vectorisé.

Python

Pour cet exemple, utilisez la méthode create_dynamic_frame.from_options.

# Example: Read CSV from S3 # For show, we handle a CSV with a header row. Set the withHeader option. # Consider whether optimizePerformance is right for your workflow. 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="csv", format_options={ "withHeader": True, # "optimizePerformance": True, }, )

Vous pouvez également utiliser DataFrames dans un script (pyspark.sql.DataFrame).

dataFrame = spark.read\ .format("csv")\ .option("header", "true")\ .load("s3://s3path")
Scala

Pour cet exemple, utilisez l'opération getSourceWithFormat.

// Example: Read CSV from S3 // For show, we handle a CSV with a header row. Set the withHeader option. // Consider whether optimizePerformance 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) val dynamicFrame = glueContext.getSourceWithFormat( formatOptions=JsonOptions("""{"withHeader": true}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""") ).getDynamicFrame() } }

Vous pouvez également utiliser DataFrames dans un script (org.apache.spark.sql.DataFrame).

val dataFrame = spark.read .option("header","true") .format("csv") .load("s3://s3path“)

Exemple : écriture de fichiers et dossiers CSV dans S3

Prérequis : vous aurez besoin d'un DataFrame (dataFrame) ou un d'un DynamicFrame (dynamicFrame) lancé. Vous aurez également besoin de votre chemin de sortie S3, s3path.

Configuration : dans vos options de fonction, spécifiez format="csv". Dans vos connection_options, utilisez la clé paths pour spécifier s3path. Vous pouvez configurer la manière dont le scripteur interagit avec S3 dans connection_options. Pour plus d'informations, consultez les Types et options de connexion pour ETL dans AWS Glue : Paramètres de connexion S3. Vous pouvez configurer la manière dont votre opération écrit le contenu de vos fichiers dans format_options. Pour plus d'informations, consultez CSV Configuration Reference (Référence de configuration CSV). Le script ETL AWS Glue suivant montre le processus d'écriture de fichiers et dossiers CSV vers S3.

Python

Pour cet exemple, utilisez la méthode write_dynamic_frame.from_options.

# Example: Write CSV to S3 # For show, customize how we write string type values. Set quoteChar to -1 so our values are not quoted. 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", connection_options={"path": "s3://s3path"}, format="csv", format_options={ "quoteChar": -1, }, )

Vous pouvez également utiliser DataFrames dans un script (pyspark.sql.DataFrame).

dataFrame.write\ .format("csv")\ .option("quote", None)\ .mode("append")\ .save("s3://s3path")
Scala

Pour cet exemple, utilisez la méthode getSinkWithFormat.

// Example: Write CSV to S3 // For show, customize how we write string type values. Set quoteChar to -1 so our values are not quoted. 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="csv" ).writeDynamicFrame(dynamicFrame) } }

Vous pouvez également utiliser DataFrames dans un script (org.apache.spark.sql.DataFrame).

dataFrame.write .format("csv") .option("quote", null) .mode("Append") .save("s3://s3path")

Référence de configuration CSV

Vous pouvez utiliser les format_options suivantes partout où les bibliothèques AWS Glue spécifient format="csv" :

  • separator – spécifie le caractère délimiteur. La valeur par défaut est une virgule, mais tout autre caractère peut être spécifié.

    • Type : texte, Valeur par défaut : ","

  • escaper – spécifie le caractère à utiliser pour l'échappement. Cette option est utilisée uniquement lors de la lecture de fichiers CSV, pas l'écriture. Si cette option est activée, le caractère qui suit immédiatement est utilisé tel quel, sauf pour un petit ensemble d'échappements connus (\n, \r, \t et \0).

    • Type : texte, Valeur par défaut : aucune

  • quoteChar – spécifie le caractère à utiliser pour les guillemets. La valeur par défaut est les guillemets doubles. Définissez ce champ sur -1 pour désactiver entièrement les guillemets.

    • Type : texte, Valeur par défaut : '"'

  • multiLine – spécifie si un même enregistrement peut couvrir plusieurs lignes. Cela peut se produire lorsqu'un champ contient un caractère de nouvelle ligne. Vous devez définir cette option sur True si aucun enregistrement ne s'étend sur plusieurs lignes. L'activation de multiLine peut réduire les performances, car elle nécessite un fractionnement plus prudent des fichiers lors de l'analyse.

    • Type : Booléen, Valeur par défaut : false

  • withHeader – spécifie spécifie s'il convient de traiter la première ligne comme un en-tête. Cette option peut être utilisée dans la classe DynamicFrameReader.

    • Type : Booléen, Valeur par défaut : false

  • writeHeader – spécifie s'il convient d'écrire l'en-tête dans la sortie. Cette option peut être utilisée dans la classe DynamicFrameWriter.

    • Type : Booléen, Valeur par défaut : true

  • skipFirst – spécifie s'il convient d'ignorer la première ligne de données.

    • Type : Booléen, Valeur par défaut : false

  • optimizePerformance –spécifie s'il faut utiliser le lecteur CSV SIMD avancé avec les formats de mémoire en colonnes basés sur Apache Arrow. Disponible uniquement dans les versions 3.0 et ultérieures d'AWS Glue.

    • Type : Booléen, Valeur par défaut : false

  • strictCheckForQuoting : lors de l'écriture des fichiers CSV, Glue peut ajouter des guillemets aux valeurs qu'il interprète comme des chaînes. Cela est fait pour éviter toute ambiguïté dans ce qui est écrit. Pour gagner du temps au moment de décider quoi écrire, Glue peut ajouter des guillemets dans certaines situations où ils ne sont pas nécessaires. L'activation d'une vérification stricte effectuera un calcul plus intensif et n'ajoutera de guillemets qu'en cas de nécessité absolue. Disponible uniquement dans les versions 3.0 et ultérieures d'AWS Glue.

    • Type : Booléen, Valeur par défaut : false

Optimiser les performances de lecture avec un lecteur CSV SIMD vectorisé

La version 3.0 d'AWS Glue ajoute un lecteur CSV optimisé qui peut considérablement accélérer les performances globales des tâches par rapport aux lecteurs CSV basés sur des lignes.

Le lecteur optimisé :

  • utilise les instructions SIMD du processeur pour lire sur le disque

  • ecrit immédiatement les enregistrements en mémoire dans un format en colonnes (Apache Arrow)

  • divise les enregistrements en lots

Cette méthode permet de gagner du temps de traitement lorsque les enregistrements sont ultérieurement regroupés ou convertis en format en colonnes. Certains exemples concernent la modification de schémas ou la récupération de données par colonne.

Pour utiliser le lecteur optimisé, définissez "optimizePerformance" sur true dans le format_options ou la propriété table.

glueContext.create_dynamic_frame.from_options( frame = datasource1, connection_type = "s3", connection_options = {"paths": ["s3://s3path"]}, format = "csv", format_options={ "optimizePerformance": True, "separator": "," }, transformation_ctx = "datasink2")

Limitations du lecteur CSV vectorisé

Notez les limitations suivantes du lecteur CSV vectorisé :

  • Il ne prend pas en charge les options de formatage multiLine et escaper. Il utilise la valeur par défaut escaper du caractère guillemets doubles '"'. Lorsque ces options sont définies, AWS Glue revient automatiquement à l'utilisation du lecteur CSV basé sur les lignes.

  • Il ne prend pas en charge la création d'un DynamicFrame avec ChoiceType.

  • Il ne prend pas en charge la création d'un DynamicFrame avec des enregistrements d'erreur.

  • Il ne prend pas en charge la lecture de fichiers CSV contenant des caractères multioctets tels que des caractères japonais ou chinois.