Odczytywanie plików CSV
Ten artykuł zawiera przykłady odczytywania plików CSV z usługą Azure Databricks przy użyciu języków Python, Scala, R i SQL.
Uwaga
Usługa Databricks zaleca read_files funkcji wartości tabeli dla użytkowników sql w celu odczytywania plików CSV. read_files
jest dostępny w środowisku Databricks Runtime 13.3 LTS i nowszym.
Możesz również użyć widoku tymczasowego. Jeśli używasz programu SQL do bezpośredniego odczytywania danych CSV bez używania widoków tymczasowych lub read_files
, obowiązują następujące ograniczenia:
- Nie można określić opcji źródła danych.
- Nie można określić schematu danych.
Opcje
Dla źródeł danych plików CSV można skonfigurować kilka opcji. Aby uzyskać informacje na temat obsługiwanych opcji odczytu, zobacz następujące artykuły referencyjne platformy Apache Spark:
W tym artykule opisano tylko czytanie pliku CSV, ale możesz dowiedzieć się więcej o obsługiwanych opcjach zapisu w następujących artykułach referencyjnych platformy Apache Spark:
Praca z nieprawidłowo sformułowanymi rekordami CSV
Podczas odczytywania plików CSV z określonym schematem możliwe jest, że dane w plikach nie są zgodne ze schematem. Na przykład pole zawierające nazwę miasta nie będzie analizować jako liczba całkowita. Konsekwencje zależą od trybu, w jaki działa analizator:
PERMISSIVE
(ustawienie domyślne): wartości null są wstawiane dla pól, których nie można poprawnie przeanalizowaćDROPMALFORMED
: usuwa wiersze zawierające pola, których nie można przeanalizowaćFAILFAST
: przerywa odczytywanie w przypadku znalezienia źle sformułowanych danych
Aby ustawić tryb, użyj mode
opcji .
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
W trybie PERMISSIVE
można sprawdzić wiersze, których nie można poprawnie przeanalizować przy użyciu jednej z następujących metod:
- Możesz podać niestandardową ścieżkę do opcji
badRecordsPath
rejestrowania uszkodzonych rekordów w pliku. - Możesz dodać kolumnę
_corrupt_record
do schematu dostarczonego do elementu DataFrameReader, aby przejrzeć uszkodzone rekordy w wynikowej ramce danych.
Uwaga
Opcja badRecordsPath
ma pierwszeństwo przed _corrupt_record
wartością , co oznacza, że źle sformułowane wiersze zapisane w podanej ścieżce nie są wyświetlane w wynikowej ramce danych.
Domyślne zachowanie źle sformułowanych rekordów zmienia się podczas korzystania z uratowanej kolumny danych.
Znajdowanie źle sformułowanego notesu wierszy
Uratowana kolumna danych
Uwaga
Ta funkcja jest obsługiwana w środowisku Databricks Runtime 8.3 (EoS) i nowszym.
W przypadku korzystania z PERMISSIVE
trybu można włączyć uratowaną kolumnę danych, aby przechwycić wszystkie dane, które nie zostały przeanalizowane, ponieważ co najmniej jedno pole w rekordzie ma jeden z następujących problemów:
- Brak podanego schematu.
- Nie jest zgodny z typem danych podanego schematu.
- Ma niezgodność wielkości liter z nazwami pól w podanym schemacie.
Uratowana kolumna danych jest zwracana jako dokument JSON zawierający kolumny, które zostały uratowane, oraz ścieżkę pliku źródłowego rekordu. Aby usunąć ścieżkę pliku źródłowego z uratowanej kolumny danych, możesz ustawić konfigurację spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
SQL . Możesz włączyć uratowaną kolumnę danych, ustawiając opcję rescuedDataColumn
na nazwę kolumny podczas odczytywania danych, na przykład _rescued_data
za pomocą polecenia spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
Analizator CSV obsługuje trzy tryby podczas analizowania rekordów: PERMISSIVE
, DROPMALFORMED
i FAILFAST
. W przypadku użycia razem z elementem rescuedDataColumn
niezgodność typów danych nie powoduje porzucenia rekordów w DROPMALFORMED
trybie lub zgłaszania błędu w FAILFAST
trybie. Tylko uszkodzone rekordy — czyli niekompletne lub źle sformułowane woluminy CSV — są porzucane lub zgłaszane błędy.
W rescuedDataColumn
przypadku użycia w PERMISSIVE
trybie następujące reguły dotyczą uszkodzonych rekordów:
- Pierwszy wiersz pliku (wiersz nagłówka lub wiersz danych) ustawia oczekiwaną długość wiersza.
- Wiersz z inną liczbą kolumn jest uznawany za niekompletny.
- Niezgodność typów danych nie jest uznawana za uszkodzone rekordy.
- Tylko niekompletne i źle sformułowane rekordy CSV są uznawane za uszkodzone i rejestrowane w kolumnie
_corrupt_record
lubbadRecordsPath
.
Przykład SQL: Odczyt pliku CSV
Poniższy przykład SQL odczytuje plik CSV przy użyciu polecenia 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')
Przykłady języków Scala, R i Python: odczyt pliku CSV
W poniższym notesie pokazano, jak odczytać plik, wyświetlić przykładowe dane i wydrukować schemat danych przy użyciu języka Scala, R i Python. W przykładach w tej sekcji użyto zestawu danych diamentów. Określ ścieżkę do zestawu danych, a także wszelkie opcje, które chcesz.
Odczytywanie notesu plików CSV
Przykład: Określanie schematu
Gdy jest znany schemat pliku CSV, można określić żądany schemat dla czytnika CSV z opcją schema
.
Odczytywanie plików CSV za pomocą notesu schematu
Przykład SQL przy użyciu polecenia read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Przykład: pułapki odczytywania podzestawu kolumn
Zachowanie analizatora CSV zależy od zestawu odczytanych kolumn. Jeśli określony schemat jest niepoprawny, wyniki mogą się znacznie różnić w zależności od podzestawu kolumn, do których uzyskuje się dostęp. Poniższy notes przedstawia najbardziej typowe pułapki.