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_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 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 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.

Standardbeteendet för felaktiga poster ändras när du använder den räddade datakolumnen.

Hitta en notebook-fil med felaktiga rader

Hämta notebook-fil

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, DROPMALFORMEDoch 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 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(
  '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

Hämta 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

Hämta notebook-fil

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.

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

Hämta notebook-fil