CSV-bestanden lezen
Dit artikel bevat voorbeelden voor het lezen van 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_files
de volgende beperkingen:
- U kunt geen opties voor gegevensbronnen opgeven.
- U kunt het schema voor de gegevens niet opgeven.
Opties
U kunt verschillende opties configureren voor csv-bestandsgegevensbronnen. Zie de volgende Apache Spark-referentieartikelen voor ondersteunde leesopties:
Dit artikel bevat alleen informatie over het lezen van CSV, maar u kunt meer informatie krijgen over ondersteunde schrijfopties in de volgende Apache Spark-referentieartikelen:
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 geparseerdDROPMALFORMED
: lijnen verwijderen die velden bevatten die niet kunnen worden geparseerdFAILFAST
: 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_record
wat 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
Kolom met geredde gegevens
Notitie
Deze functie wordt ondersteund in Databricks Runtime 8.3 (EoS) 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
, DROPMALFORMED
en FAILFAST
. Wanneer gegevenstypen samen met rescuedDataColumn
elkaar 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 ofbadRecordsPath
.
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
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
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.