Läsa CSV-filer
Den här artikeln innehåller exempel för att läsa CSV-filer med Azure Databricks med hjälp av Python, Scala, R och SQL.
Kommentar
Databricks rekommenderar funktionen read_files tabellvärde för SQL-användare att läsa CSV-filer. read_files
finns i Databricks Runtime 13.3 LTS och senare.
Du kan också använda en tillfällig vy. Om du använder SQL för att läsa CSV-data direkt utan att använda tillfälliga vyer eller read_files
gäller följande begränsningar:
- Du kan inte ange alternativ för datakälla.
- Du kan inte ange schemat för data.
Alternativ
Du kan konfigurera flera alternativ för CSV-fildatakällor. Läs mer i följande Apache Spark-referensartiklar för läsalternativ som stöds:
Den här artikeln beskriver endast läsning av CSV, men du kan lära dig mer om skrivalternativ som stöds i följande Apache Spark-referensartiklar:
Arbeta med felaktiga CSV-poster
När du läser CSV-filer med ett angivet schema är det möjligt att data i filerna inte matchar schemat. Ett fält som till exempel innehåller namnet på staden parsas inte som ett heltal. Konsekvenserna beror på vilket läge parsern körs i:
PERMISSIVE
(standard): null infogas för fält som inte kunde parsas korrektDROPMALFORMED
: släpper rader som innehåller fält som inte kunde parsasFAILFAST
: avbryter läsningen om felaktiga data hittas
Om du vill ange läget använder du alternativet mode
.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
I läget PERMISSIVE
är det möjligt att inspektera de rader som inte kunde parsas korrekt med någon av följande metoder:
- Du kan ange en anpassad sökväg till alternativet
badRecordsPath
för att registrera skadade poster i en fil. - Du kan lägga till kolumnen
_corrupt_record
i schemat som anges i DataFrameReader för att granska skadade poster i den resulterande DataFrame.
Kommentar
Alternativet badRecordsPath
har företräde framför , vilket innebär att felformade rader som skrivits till den angivna sökvägen inte visas i den resulterande DataFrame.The option takes precedence over _corrupt_record
, meaning that malformed rows written to the provided path do not appear in the resultant DataFrame.
Standardbeteendet för felaktiga poster ändras när du använder den räddade datakolumnen.
Hitta en notebook-fil med felaktiga rader
Datakolumnen Räddad
Kommentar
Den här funktionen stöds i Databricks Runtime 8.3 (EoS) och senare.
När du använder PERMISSIVE
läget kan du aktivera den räddade datakolumnen för att samla in data som inte parsats eftersom ett eller flera fält i en post har något av följande problem:
- Saknas i det angivna schemat.
- Matchar inte datatypen för det angivna schemat.
- Har ett ärendematchningsfel med fältnamnen i det angivna schemat.
Den räddade datakolumnen returneras som ett JSON-dokument som innehåller kolumnerna som räddades och källfilens sökväg till posten. Om du vill ta bort källfilsökvägen från den räddade datakolumnen kan du ange SQL-konfigurationen spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. Du kan aktivera den räddade datakolumnen genom att ange alternativet rescuedDataColumn
till ett kolumnnamn när du läser data, till exempel _rescued_data
med spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
CSV-parsern stöder tre lägen vid parsning av poster: PERMISSIVE
, DROPMALFORMED
och FAILFAST
. När de används tillsammans med rescuedDataColumn
, orsakar inte datatypsmatchningar att poster tas bort i DROPMALFORMED
läge eller utlöser ett fel i FAILFAST
läge. Endast skadade poster, det vill:s ofullständiga eller felaktiga CSV, tas bort eller utlöser fel.
När rescuedDataColumn
används i PERMISSIVE
läge gäller följande regler för skadade poster:
- Den första raden i filen (antingen en rubrikrad eller en datarad) anger den förväntade radlängden.
- En rad med ett annat antal kolumner anses vara ofullständig.
- Matchningsfel för datatyper betraktas inte som skadade poster.
- Endast ofullständiga och felaktiga CSV-poster anses vara skadade och registreras i
_corrupt_record
kolumnen ellerbadRecordsPath
.
SQL-exempel: Läsa CSV-fil
Följande SQL-exempel läser en CSV-fil med .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')
Scala-, R- och Python-exempel: Läs CSV-fil
Följande notebook-fil visar hur du läser en fil, visar exempeldata och skriver ut dataschemat med Scala, R och Python. Exemplen i det här avsnittet använder datauppsättningen diamonds. Ange sökvägen till datamängden samt eventuella alternativ som du vill använda.
Läsa CSV-filer notebook-fil
Exempel: Ange schema
När schemat för CSV-filen är känt kan du ange önskat schema för CSV-läsaren med alternativet schema
.
Läsa CSV-filer med schemaanteckningsboken
SQL-exempel med :read_files
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Exempel: Fallgropar vid läsning av en delmängd av kolumner
CSV-parserns beteende beror på vilken uppsättning kolumner som läss. Om det angivna schemat är felaktigt kan resultatet skilja sig avsevärt beroende på den delmängd av kolumner som används. Följande notebook-fil visar de vanligaste fallgroparna.