Dela via


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 tabellvärdesfunktionenread_files 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_filesgäller följande begränsningar:

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 defekta 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 innehåller till exempel ett stadsnamn kan inte tolkas 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 korrekt
  • DROPMALFORMED: släpper rader som innehåller fält som inte kunde parsas
  • FAILFAST: 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.

Standardbeteende för felaktigt formaterade poster ändras när du använder kolumnen för räddad data.

Hitta en notebook-fil med felaktiga rader

Hämta anteckningsbok

Återställd datakolumn

Kommentar

Den här funktionen stöds i Databricks Runtime 8.3 (EoL) 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 återvunna datakolumnen returneras som ett JSON-dokument som innehåller de kolumnerna som räddades och källfilens sökväg för 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, DROPMALFORMEDoch FAILFAST. När de används tillsammans med rescuedDataColumn, orsakar inte datatypfel att poster tas bort i DROPMALFORMED läget eller utlöser ett fel i FAILFAST läget. Endast skadade poster—det vill säga, ofullständiga eller felkonstruerade CSV-filer—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 eller badRecordsPath.

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(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<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 diamonds dataset. Ange sökvägen till datamängden samt eventuella alternativ som du vill använda.

Läs CSV-filer anteckningsbok

Hämta anteckningsbok

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 schemaanteckningblock

Hämta anteckningsbok

SQL-exempel med :read_files

SELECT * FROM read_files(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<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 anteckningsbok presenterar de vanligaste fallgroparna.

Varningar om att läsa en delmängd av kolumner i en CSV-filanteckningsbok

Hämta anteckningsbok