Utilizzo del formato CSV in AWS Glue - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del formato CSV in AWS Glue

AWS Glue recupera i dati dalle origini e scrive i dati sulle destinazioni archiviati e trasportati in vari formati di dati. Se i tuoi dati sono archiviati o trasportati nel formato di dati CSV, questo documento descrive le funzionalità disponibili per l'utilizzo dei tuoi dati in AWS Glue.

AWS Glue supporta solo il formato di file CSV (valori separati da virgole). Questo formato è un formato dati minimo basato su righe. I CSV spesso non sono strettamente conformi a uno standard, ma puoi fare riferimento a RFC 4180 e RFC 7111 per ulteriori informazioni.

Puoi utilizzare AWS Glue per leggere i CSV da Amazon S3 e da fonti di streaming e scrivere i CSV su Amazon S3. Puoi leggere e scrivere gli archivi bzip e gzip contenenti file CSV da S3. Puoi configurare il comportamento di compressione sul Parametri di connessione di S3 invece che nella configurazione discussa in questa pagina.

La tabella seguente mostra quali funzionalità comuni di AWS Glue supportano l'opzione del formato CSV.

Lettura Scrittura Lettura in streaming Gruppo di file piccoli Segnalibri di processo
Supportato Supportato Supportato Supportato Supportato

Esempio: lettura di file CSV o cartelle da S3

Prerequisiti: avrai bisogno dei percorsi S3 (s3path) nei file CSV o nelle cartelle che desideri leggere.

Configurazione : nelle opzioni della funzione, specifica format="csv". In connection_options, utilizza la chiave paths per specificare s3path. Puoi configurare il modo in cui il reader interagisce con S3 in connection_options. Per maggiori dettagli, consulta Tipi di connessione e opzioni per ETL in AWS Glue: Parametri di connessione di S3. Puoi configurare il modo in cui il reader interpreta i file CSV nel tuo format_options. Per maggiori dettagli, consulta .Riferimento alla configurazione CSV.

Il seguente script ETL di AWS Glue mostra il processo di lettura di file o cartelle CSV da S3.

Forniamo un reader CSV personalizzato con ottimizzazioni delle prestazioni per i flussi di lavoro comuni attraverso la chiave di configurazione optimizePerformance. Per determinare se questo reader è adatto al tuo carico di lavoro, consulta Ottimizza le prestazioni di lettura con il reader CSV SIMD vettorizzato.

Python

Per questo esempio, utilizza il metodo 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, }, )

Puoi utilizzare DataFrames anche in uno script (pyspark.sql.DataFrame).

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

Per questo esempio, utilizza l'operazione 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() } }

Puoi utilizzare DataFrames anche in uno script (org.apache.spark.sql.DataFrame).

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

Esempio: scrittura di file e cartelle CSV su S3

Prerequisiti: avrai bisogno di un DataFrame inizializzato (dataFrame) o di un DynamicFrame (dynamicFrame). Avrai bisogno anche del tuo percorso di output S3 previsto, s3path.

Configurazione: nelle opzioni della funzione, specifica format="csv". In connection_options, utilizza la chiave paths per specificare s3path. Puoi configurare il modo in cui il writer interagisce con S3 in connection_options. Per maggiori dettagli, consulta Tipi di connessione e opzioni per ETL in AWS Glue: Parametri di connessione di S3. Puoi configurare il modo in cui l'operazione scrive il contenuto dei file in format_options. Per maggiori dettagli, consulta .Riferimento alla configurazione CSV. Il seguente script ETL di AWS Glue mostra il processo di scrittura di file o cartelle CSV da S3.

Python

Per questo esempio, utilizza il metodo 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, }, )

Puoi utilizzare DataFrames anche in uno script (pyspark.sql.DataFrame).

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

Per questo esempio, utilizza l'operazione 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) } }

Puoi utilizzare DataFrames anche in uno script (org.apache.spark.sql.DataFrame).

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

Riferimento alla configurazione CSV

Puoi utilizzare le seguenti format_options ovunque le librerie di AWS Glue specifichino format="csv":

  • separator: specifica il carattere delimitatore. L'impostazione predefinita è una virgola, ma è possibile specificare qualsiasi altro carattere.

    • Tipo: testo, Valore predefinito: ","

  • escaper: specifica un carattere da utilizzare per l'escape. Questa opzione viene utilizzata solo durante la lettura di file CSV e non durante la scrittura. Se questa opzione è abilitata, il carattere immediatamente seguente viene usato così come è, ad eccezione di un piccolo set di caratteri escape ben noti (\n, \r, \t e \0).

    • Tipo: testo, Valore predefinito: nessuno

  • quoteChar: specifica il carattere da usare per le virgolette. Per impostazione predefinita, vengono usate le virgolette doppie. Imposta questo valore su -1 per disattivare completamente le virgolette.

    • Tipo: testo, Valore predefinito: '"'

  • multiLine: specifica se un singolo record può estendersi su più righe. Ciò può accadere quando un campo contiene un carattere di nuova riga tra virgolette. Imposta questa opzione su True se i registri si estendono su più righe. L'abilitazione di multiLine potrebbe ridurre le prestazioni perché richiede una divisione dei file più cauta durante l'analisi.

    • Tipo: booleano, Valore predefinito: false

  • withHeader: specifica se trattare la prima riga come intestazione. Questa opzione può essere usata nella classe DynamicFrameReader.

    • Tipo: booleano, Valore predefinito: false

  • writeHeader: specifica se scrivere l'intestazione nell'output. Questa opzione può essere usata nella classe DynamicFrameWriter.

    • Tipo: booleano, Valore predefinito: true

  • skipFirst: specifica se ignorare la prima riga di dati.

    • Tipo: booleano, Valore predefinito: false

  • optimizePerformance: specifica se utilizzare il reader CSV SIMD avanzato insieme ai formati di memoria colonnare basati su Apache Arrow. Disponibile solo in AWS Glue versione 3.0 o successiva.

    • Tipo: booleano, Valore predefinito: false

  • strictCheckForQuoting: durante la scrittura di CSV, Glue può aggiungere virgolette ai valori che interpreta come stringhe. Questo viene fatto per evitare ambiguità in ciò che viene scritto. Per risparmiare tempo nella decisione su cosa scrivere, Glue può utilizzare le virgolette in determinate situazioni in cui in realtà non sono necessarie. L'attivazione di un controllo rigoroso eseguirà un calcolo più intensivo e ricorrerà alle virgolette solo quando strettamente necessario. Disponibile solo in AWS Glue versione 3.0 o successiva.

    • Tipo: booleano, Valore predefinito: false

Ottimizza le prestazioni di lettura con il reader CSV SIMD vettorizzato

AWS Glue versione 3.0 aggiunge un lettore CSV ottimizzato che può velocizzare significativamente le prestazioni complessive del lavoro rispetto ai reader CSV basati su righe.

Il reader ottimizzato:

  • Usa le istruzioni SIMD della CPU per leggere dal disco

  • Scrive immediatamente i record in memoria in un formato colonnare (Apache Arrow)

  • Divide i record in batch

Ciò consente di risparmiare tempo di elaborazione quando i record verranno raggruppati in batch o convertiti in un formato colonnare in un secondo momento. Alcuni esempi sono quando si modificano schemi o si recuperano i dati in base alla colonna.

Per utilizzare il reader ottimizzato, imposta "optimizePerformance" su true nelle format_options o nella proprietà della tabella.

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")

Limitazioni per il reader CSV vettorizzato

Tieni presente le seguenti limitazioni del reader CSV vettorizzato:

  • Non supporta il le opzioni di formato multiLine e escaper. Utilizza l'escaper predefinito del carattere doppia virgoletta '"'. Quando queste opzioni sono impostate, AWS Glue torna automaticamente a utilizzare il reader CSV basato su righe.

  • Non supporta la creazione di un DynamicFrame con ChoiceType.

  • Non supporta la creazione di un DynamicFrame con record di errore.

  • Non supporta la lettura di file CSV con caratteri multibyte, come i caratteri giapponesi o cinesi.