Lesen von CSV-Dateien
Dieser Artikel enthält Beispiele für das Lesen in CSV-Dateien mit Azure Databricks unter Verwendung von Python, Scala, R und SQL.
Hinweis
Databricks empfiehlt die read_files-Tabellenwertfunktion für SQL-Benutzer, um CSV-Dateien zu lesen. read_files
ist in Databricks Runtime 13.3 LTS und höher verfügbar.
Sie können auch eine temporäre Ansicht verwenden. Wenn Sie SQL verwenden, um CSV-Daten direkt zu lesen, ohne temporäre Ansichten oder read_files
zu verwenden, gelten die folgenden Einschränkungen:
- Sie können keine Datenquellenoptionen angeben.
- Sie können kein Schema für die Daten angeben.
Optionen
Sie können mehrere Optionen für CSV-Datei-Datenquellen konfigurieren. Die unterstützten Optionen für das Lesen finden Sie in den folgenden Apache Spark-Referenzartikeln:
In diesem Artikel wird nur das Lesen von CSV-Dateien behandelt, Sie können aber in den folgenden Apache Spark-Referenzartikeln mehr über die unterstützten Schreiboptionen erfahren:
Arbeiten mit fehlerhaften CSV-Einträgen
Beim Lesen von CSV-Dateien mit einem angegebenen Schema kann es vorkommen, dass die Daten in den Dateien nicht zum Schema passen. Beispielsweise kann ein Feld, das den Namen der Stadt enthält, nicht als ganze Zahl analysiert werden. Die Folgen hängen vom Modus ab, in dem der Parser ausgeführt wird:
PERMISSIVE
(Standardeinstellung): NULL-Werte werden für Felder eingefügt, die nicht ordnungsgemäß analysiert werden konntenDROPMALFORMED
: Löscht Zeilen, die Felder enthalten, die nicht analysiert werden konntenFAILFAST
: Bricht das Lesen ab, wenn falsch formatierte Daten gefunden werden
Verwenden Sie zum Festlegen des Modus die mode
-Option.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
Im Modus PERMISSIVE
ist es möglich, die Zeilen, die nicht korrekt geparst werden konnten, mit einer der folgenden Methoden zu untersuchen:
- Sie können einen benutzerdefinierten Pfad zur Option
badRecordsPath
um beschädigte Datensätze in einer Datei aufzuzeichnen. - Sie können die Spalte
_corrupt_record
dem Schema hinzufügen, das dem DataFrameReader bereitgestellt wird, um beschädigte Datensätze im resultierenden DataFrame zu überprüfen.
Hinweis
Die Option badRecordsPath
hat Vorrang vor _corrupt_record
, was bedeutet, dass fehlerhafte Zeilen, die in den angegebenen Pfad geschrieben werden, nicht im resultierenden DataFrame angezeigt werden.
Standardverhalten für falsch formatierte Datensätze ändert sich bei Verwendung der geretteten Datenspalte.
Notebook zum Suchen falsch formatierter Zeilen
Spalte „Gerettete Daten“
Hinweis
Dieses Feature wird in Databricks Runtime 8.3 (EoS) und höher unterstützt.
Wenn Sie den PERMISSIVE
Modus verwenden, können Sie die Spalte für gerettete Daten aktivieren, um alle Daten zu erfassen, die nicht geparst wurden, weil eines oder mehrere Felder in einem Datensatz eines der folgenden Probleme aufweisen:
- Fehlt im bereitgestellten Schema.
- Stimmt nicht mit dem Datentyp des bereitgestellten Schemas überein.
- Weist einen Fallkonflikt mit den Feldnamen im angegebenen Schema auf.
Die gerettete Datenspalte wird als JSON-Dokument zurückgegeben, das die geretteten Spalten und den Quelldateipfad des Datensatzes enthält. Um den Quelldateipfad aus der Spalte Gerettete Daten zu entfernen, können Sie die SQL-Konfiguration spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
festlegen. Sie können die gerettete Datenspalte aktivieren, indem Sie die Option rescuedDataColumn
beim Lesen von Daten auf einen Spaltennamen setzen, z. B. _rescued_data
mit spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
Der CSV-Parser unterstützt drei Modi beim Parsen von Datensätzen: PERMISSIVE
, DROPMALFORMED
und FAILFAST
. Bei Verwendung mit rescuedDataColumn
führen Datentypkonflikte nicht dazu, dass Datensätze im Modus DROPMALFORMED
gelöscht werden oder im Modus FAILFAST
einen Fehler auslösen. Nur beschädigte Datensätze, d. h. unvollständige oder falsch formatierte CSV-Dateien, werden verworfen oder führen zu Fehlern.
Wenn rescuedDataColumn
der PERMISSIVE
Modus verwendet wird, gelten die folgenden Regeln für beschädigte Datensätze:
- Die erste Zeile der Datei (entweder eine Kopfzeile oder eine Datenzeile) legt die erwartete Zeilenlänge fest.
- Eine Zeile mit einer anderen Anzahl von Spalten wird als unvollständig betrachtet.
- Datentypübereinstimmungen werden nicht als beschädigte Datensätze betrachtet.
- Nur unvollständige und falsch formatierte CSV-Datensätze werden als beschädigt betrachtet und in der Spalte
_corrupt_record
oderbadRecordsPath
aufgezeichnet.
SQL-Beispiel: CSV-Datei lesen
Im folgenden SQL-Beispiel wird eine CSV-Datei mit read_files
gelesen.
-- 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- und Python-Beispiele: CSV-Datei lesen
Das folgende Notebook zeigt, wie Sie mit Scala, R und Python eine Datei lesen, Beispieldaten anzeigen und das Datenschema drucken können. Die Beispiele in diesem Abschnitt verwenden den Rauten-Datensatz. Geben Sie den Pfad zum Dataset sowie alle gewünschten Optionen an.
Notebook zum Lesen von CSV-Dateien
Beispiel: Angeben des Schemas
Wenn das Schema der CSV-Datei bekannt ist, können Sie das gewünschte Schema für den CSV-Reader mit der schema
-Option angeben.
Notebook zum Lesen von CSV-Dateien mit Schema
SQL-Beispiel mit read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Beispiel: Häufige Schwierigkeiten beim Lesen einer Teilmenge von Spalten
Das Verhalten des CSV-Parsers hängt vom gelesenen Spaltensatz ab. Wenn das angegebene Schema falsch ist, können sich die Ergebnisse je nachdem, auf welche Teilmenge der Spalten zugegriffen wird, erheblich unterscheiden. Das folgende Notebook zeigt die häufigsten Schwierigkeiten.