Leggere un file CSV
Questo articolo fornisce esempi di lettura di file CSV con Azure Databricks utilizzando Python, Scala, R e SQL.
Nota
Per leggere i file CSV, Databricks consiglia agli utenti di SQL la funzione con valori di tabella read_files. 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 visualizzazioni temporanee o read_files
, si applicano le limitazioni seguenti:
- Non è possibile specificare le opzioni dell'origine dati.
- Non è possibile specificare lo schema per i dati.
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 file CSV con uno schema specificato, è possibile che i dati nei file non corrispondano allo 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 correttamenteDROPMALFORMED
: elimina le righe che contengono campi che non possono essere analizzatiFAILFAST
: interrompe la lettura se vengono rilevati dati in formato non valido
Per impostare la modalità, usare 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 la colonna
_corrupt_record
allo 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 usa la colonna di dati recuperati.
Trovare un notebook di righe in formato non valido
Colonna di dati recuperati
Nota
Questa funzionalità è supportata in Databricks Runtime 8.3 (EoS) e versioni successive.
Quando si usa la modalità PERMISSIVE
, è possibile abilitare la colonna di dati recuperati per acquisire tutti i dati che non sono stati analizzati perché uno o più campi in un record presentano uno dei problemi seguenti:
- Assente nello schema fornito.
- Non corrisponde al tipo di dati dello schema fornito.
- Ha una mancata corrispondenza tra maiuscole e minuscole rispetto ai nomi dei campi nello schema fornito.
La colonna di dati recuperati viene restituita come documento JSON contenente le colonne recuperate e il percorso del file di origine del record. Per rimuovere il percorso dei file di origine dalla colonna di dati recuperati, è possibile impostare la configurazione SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. durante la lettura dei dati, è possibile abilitare la colonna di dati recuperati impostando l'opzione rescuedDataColumn
su un nome di colonna, ad esempio _rescued_data
su spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
Il parser CSV supporta tre modalità durante l'analisi dei record: PERMISSIVE
, DROPMALFORMED
e 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 colonne 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 nella colonna
_corrupt_record
o nella colonnabadRecordsPath
.
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 lo schema dei dati 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
Esempio: specificare lo schema
Quando lo schema del file CSV è noto, è possibile specificare lo schema desiderato per il lettore CSV usando l'opzione schema
.
Notebook: Leggere file CSV con uno schema
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: errori di lettura di un sottoinsieme di colonne
Il comportamento del parser CSV dipende dal set di colonne lette. Se lo schema specificato non è corretto, i risultati potrebbero variare notevolmente a seconda del sottoinsieme di colonne a cui si accede. Il notebook seguente presenta gli errori più comuni.