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 funktionen read_files table-valued 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 views 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 en angiven schemaär det möjligt att data i filerna inte matchar schema. 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 set 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 column_corrupt_record i schema som tillhandahålls till DataFrameReader för att granska skadade poster i den resulterande DataFramen.

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 återvunna data column.

Hitta en notebook-fil med felaktiga rader

Get anteckningsbok

Räddade data column

Kommentar

Den här funktionen stöds i Databricks Runtime 8.3 (EoS) och senare.

Vid användning av det PERMISSIVE-läget kan du aktivera den räddade datan column för att samla in data som inte har parsats eftersom ett eller flera fält i en post har något av följande problem:

  • Frånvarande från den angivna schema.
  • Matchar inte datatypen för den angivna schema.
  • Har ett ärendematchningsfel med fältnamnen i den angivna schema.

De räddade data column returneras som ett JSON-dokument som innehåller de columns som räddades och postens källsökväg. Om du vill remove sökvägen till källfilen från den räddade datan columnkan du set konfigurationen för SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Du kan aktivera den räddade datan column genom att ställa in alternativet rescuedDataColumn till ett column namn när du läser in 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 columns 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_recordcolumn 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 data schema 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

Get laptop-

exempel: Ange schema

När schema av CSV-filen är känd kan du ange önskad schema till CSV-läsaren med alternativet schema.

Läs CSV-filer med schema notebook

Get anteckningsbok

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 columns

CSV-parserns beteende beror på set på columns som läses. Om den angivna schema är felaktig kan resultatet variera avsevärt beroende på delmängden av columns som används. Följande notebook-fil visar de vanligaste fallgroparna.

Begränsningar vid läsning av en delmängd av columns från en CSV-filanteckningsbok

Get anteckningsbok