Condividi tramite


Leggere un file CSV

Questo articolo fornisce esempi di lettura di file CSV con Azure Databricks utilizzando Python, Scala, R e SQL.

Nota

Databricks consiglia la read_files tablefunzione con valori per consentire agli utenti SQL di leggere i file CSV. read_files è disponibile in Databricks Runtime 13.3 e versioni successive.

È anche possibile usare una visualizzazione temporanea. Se si usa SQL per leggere i dati CSV direttamente senza usare views temporanei o read_files, si applicano le limitazioni seguenti:

Opzioni

È possibile configurare diverse opzioni per le origini dati dei file CSV. Per le opzioni di lettura supportate, vedere gli articoli di riferimento di Apache Spark seguenti:

Questo articolo illustra solo la lettura di CSV, ma è possibile ottenere informazioni sulle opzioni di scrittura supportate nei seguenti articoli di riferimento di Apache Spark:

Usare record CSV in formato non valido

Quando si leggono i file CSV con un schemaspecificato, è possibile che i dati nei file non corrispondano al schema. Ad esempio, un campo contenente il nome della città non verrà analizzato come numero intero. Le conseguenze dipendono dalla modalità in cui viene eseguito il parser:

  • PERMISSIVE (impostazione predefinita): i valori Null vengono inseriti per i campi che non possono essere analizzati correttamente
  • DROPMALFORMED: elimina le righe che contengono campi che non possono essere analizzati
  • FAILFAST: interrompe la lettura se vengono rilevati dati in formato non valido

Per attivare la modalità set, utilizzare l'opzione mode.

diamonds_df = (spark.read
  .format("csv")
  .option("mode", "PERMISSIVE")
  .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)

Nella modalità PERMISSIVE è possibile esaminare le righe che non è stato possibile analizzare correttamente usando uno dei metodi seguenti:

  • È possibile fornire un percorso personalizzato all'opzione badRecordsPath per registrare i record danneggiati in un file.
  • È possibile aggiungere il column_corrupt_record al schema fornito al DataFrameReader per esaminare i record danneggiati nel dataframe risultante.

Nota

L'opzione badRecordsPath ha la precedenza sull'opzione _corrupt_record, ovvero le righe in formato non valido scritte nel percorso specificato non vengono visualizzate nel DataFrame risultante.

Il comportamento predefinito per i record in formato non valido cambia quando si usano i dati recuperati column.

Trovare un notebook di righe in formato non valido

Get portatile

column dati salvati

Nota

Questa funzionalità è supportata in Databricks Runtime 8.3 (EoS) e versioni successive.

Quando si usa la modalità PERMISSIVE, è possibile abilitare i dati salvati column per acquisire tutti i dati che non sono stati analizzati perché uno o più campi in un record presentano uno dei problemi seguenti:

  • Non presente nel schemafornito.
  • Non corrisponde al tipo di dati del schemaspecificato.
  • Ha una mancata corrispondenza tra maiuscole e minuscole con i nomi dei campi nel schemaspecificato.

I dati salvati column vengono restituiti come documento JSON contenente i columns salvati e il percorso del file di origine del record. Per remove il percorso del file di origine dai dati salvati column, è possibile set la configurazione SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). È possibile abilitare i dati recuperati column impostando l'opzione rescuedDataColumn su un nome di column durante la lettura dei dati, come _rescued_data con spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

Il parser CSV supporta tre modalità durante l'analisi dei record: PERMISSIVE, DROPMALFORMEDe FAILFAST. Se usato insieme a rescuedDataColumn, le mancate corrispondenze del tipo di dati non causano l'esclusione dei record in modalità DROPMALFORMED oppure generano un errore in modalità FAILFAST. Solo i record danneggiati, ovvero csv incompleti o in formato non valido, vengono esclusi o generano errori.

Quando rescuedDataColumn viene usato in modalità PERMISSIVE, ai record danneggiati vengono applicate le regole seguenti:

  • La prima riga del file (una riga di intestazione o una riga di dati) imposta la lunghezza prevista della riga.
  • Una riga con un numero diverso di columns viene considerata incompleta.
  • Le mancate corrispondenze del tipo di dati non sono considerate record danneggiati.
  • Solo i record CSV incompleti e in formato non valido vengono considerati danneggiati e registrati nel _corrupt_recordcolumn o badRecordsPath.

Esempio SQL: lettura di un file CSV

Nell'esempio SQL seguente viene letto un file CSV usando read_files.

-- mode "FAILFAST" aborts file parsing with a RuntimeException if malformed lines are encountered
SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => true,
  mode => 'FAILFAST')

Esempi di Scala, R e Python: lettura di un file CSV

Il notebook seguente illustra come leggere un file, visualizzare i dati di esempio e stampare i dati schema usando Scala, R e Python. Gli esempi in questa sezione usano il set di dati diamond. Specificare il percorso del set di dati e tutte le opzioni desiderate.

Notebook: Leggere file CSV

Get portatile

Esempio di : specificare schema

Quando la schema del file CSV è nota, è possibile specificare il schema desiderato al lettore CSV con l'opzione schema.

Leggi i file CSV con il notebook schema

Get portatile

Esempio di SQL con read_files:

SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

Esempio: Problemi di lettura di un subset di columns

Il comportamento del parser CSV è determinato in base al set di columns che vengono letti. Se il schema specificato non è corretto, i risultati potrebbero variare notevolmente a seconda del subset di columns a cui si accede. Il notebook seguente presenta gli errori più comuni.

Avvertenze per la lettura di un sottoinsieme di columns da un notebook con file CSV

Get portatile