Share via


Lezen en schrijven naar CSV-bestanden

Dit artikel bevat voorbeelden voor het lezen en schrijven naar CSV-bestanden met Azure Databricks met behulp van Python, Scala, R en SQL.

Notitie

Databricks raadt de read_files tabelwaardefunctie aan voor SQL-gebruikers om CSV-bestanden te lezen. read_files is beschikbaar in Databricks Runtime 13.3 LTS en hoger.

U kunt ook een tijdelijke weergave gebruiken. Als u SQL gebruikt om CSV-gegevens rechtstreeks te lezen zonder tijdelijke weergaven te gebruiken, gelden read_filesde volgende beperkingen:

Opties

U kunt verschillende opties configureren voor csv-bestandsgegevensbronnen. Zie de volgende Apache Spark-referentieartikelen voor ondersteunde lees- en schrijfopties.

Werken met ongeldige CSV-records

Wanneer u CSV-bestanden leest met een opgegeven schema, is het mogelijk dat de gegevens in de bestanden niet overeenkomen met het schema. Een veld met de naam van de plaats wordt bijvoorbeeld niet geparseerd als een geheel getal. De gevolgen zijn afhankelijk van de modus waarin de parser wordt uitgevoerd:

  • PERMISSIVE (standaard): null-waarden worden ingevoegd voor velden die niet correct kunnen worden geparseerd
  • DROPMALFORMED: lijnen verwijderen die velden bevatten die niet kunnen worden geparseerd
  • FAILFAST: de leesactie wordt afgebroken als er ongeldige gegevens worden gevonden

Als u de modus wilt instellen, gebruikt u de mode optie.

diamonds_df = (spark.read
  .format("csv")
  .option("mode", "PERMISSIVE")
  .load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)

In de PERMISSIVE modus is het mogelijk om de rijen te inspecteren die niet correct kunnen worden geparseerd met behulp van een van de volgende methoden:

  • U kunt een aangepast pad opgeven naar de optie badRecordsPath om beschadigde records op te nemen in een bestand.
  • U kunt de kolom _corrupt_record toevoegen aan het schema dat is opgegeven aan DataFrameReader om beschadigde records in het resulterende DataFrame te controleren.

Notitie

De badRecordsPath optie heeft voorrang, _corrupt_recordwat betekent dat onjuiste rijen die naar het opgegeven pad zijn geschreven, niet worden weergegeven in het resulterende DataFrame.

Standaardgedrag voor onjuiste records wordt gewijzigd bij gebruik van de kolom met geredde gegevens.

Notitieblok voor onjuiste rijen zoeken

Notebook downloaden

Kolom met geredde gegevens

Notitie

Deze functie wordt ondersteund in Databricks Runtime 8.3 (niet ondersteund) en hoger.

Wanneer u de PERMISSIVE modus gebruikt, kunt u de opgeslagen gegevenskolom inschakelen om gegevens vast te leggen die niet zijn geparseerd omdat een of meer velden in een record een van de volgende problemen hebben:

  • Afwezig uit het opgegeven schema.
  • Komt niet overeen met het gegevenstype van het opgegeven schema.
  • Komt niet overeen met de veldnamen in het opgegeven schema.

De kolom met geredde gegevens wordt geretourneerd als een JSON-document met de kolommen die zijn gered en het bronbestandspad van de record. Als u het bronbestandspad uit de kolom met geredde gegevens wilt verwijderen, kunt u de SQL-configuratie spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")instellen. U kunt de kolom met geredde gegevens inschakelen door de optie rescuedDataColumn in te stellen op een kolomnaam bij het lezen van gegevens, zoals _rescued_data bij spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

De CSV-parser ondersteunt drie modi bij het parseren van records: PERMISSIVE, DROPMALFORMEDen FAILFAST. Wanneer gegevenstypen samen met rescuedDataColumnelkaar worden gebruikt, komen records niet overeen in DROPMALFORMED de modus of veroorzaken ze een fout in FAILFAST de modus. Alleen beschadigde records ( onvolledige of onjuist gevormde CSV) worden verwijderd of veroorzaken fouten.

Wanneer rescuedDataColumn deze wordt gebruikt in PERMISSIVE de modus, zijn de volgende regels van toepassing op beschadigde records:

  • Met de eerste rij van het bestand (een veldnamenrij of een gegevensrij) wordt de verwachte rijlengte ingesteld.
  • Een rij met een ander aantal kolommen wordt als onvolledig beschouwd.
  • Gegevenstype komt niet overeen met beschadigde records.
  • Alleen onvolledige en onjuiste CSV-records worden beschouwd als beschadigd en vastgelegd in de _corrupt_record kolom of badRecordsPath.

SQL-voorbeeld: CSV-bestand lezen

In het volgende SQL-voorbeeld wordt een CSV-bestand gelezen met behulp van 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')

Voorbeelden van Scala, R en Python: CSV-bestand lezen

In het volgende notebook ziet u hoe u een bestand leest, voorbeeldgegevens weergeeft en het gegevensschema afdrukt met behulp van Scala, R en Python. In de voorbeelden in deze sectie wordt de gegevensset diamanten gebruikt. Geef het pad op naar de gegevensset en de gewenste opties.

Notitieblok voor CSV-bestanden lezen

Notebook downloaden

Voorbeeld: Schema opgeven

Wanneer het schema van het CSV-bestand bekend is, kunt u het gewenste schema opgeven voor de CSV-lezer met de schema optie.

CSV-bestanden lezen met schemanotitieblok

Notebook downloaden

SQL-voorbeeld met:read_files

SELECT * FROM read_files(
  's3://<bucket>/<path>/<file>.csv',
  format => 'csv',
  header => false,
  schema => 'id string, date date, event_time timestamp')

Voorbeeld: Valkuilen bij het lezen van een subset kolommen

Het gedrag van de CSV-parser is afhankelijk van de set kolommen die worden gelezen. Als het opgegeven schema onjuist is, kunnen de resultaten aanzienlijk verschillen, afhankelijk van de subset van kolommen die worden geopend. In het volgende notebook worden de meest voorkomende valkuilen weergegeven.

Opmerkingen bij het lezen van een subset kolommen van een CSV-bestandsnotitieblok

Notebook downloaden