Udostępnij za pośrednictwem


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 użytkownikom sql funkcję wartości tabeli 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:

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 zostanie zinterpretowane 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 komponentu DataFrameReader, aby przejrzeć uszkodzone rekordy w wynikowej ramce danych.

Uwaga

Opcja badRecordsPath ma pierwszeństwo przed wartością _corrupt_record, co oznacza, że błędnie sformułowane wiersze zapisane w podanej ścieżce nie pojawiają się w wynikowym DataFrame.

Domyślne zachowanie źle sformułowanych rekordów zmienia się podczas korzystania z uratowanej kolumny danych.

Znajdź źle sformułowane wiersze w notatniku

Pobierz laptopa

Uratowana kolumna danych

Uwaga

Ta funkcja jest obsługiwana w środowisku Databricks Runtime 8.3 lub nowszym.

Podczas korzystania z trybu PERMISSIVE można włączyć zapasową kolumnę danych, aby przechwycić wszystkie niezinterpretowane dane, które nie zostały przeanalizowane, ponieważ przynajmniej jedno z pól w rekordzie ma jeden z następujących problemów:

  • Brak podanego schematu.
  • Nie jest zgodny z typem danych podanego schematu.
  • Ma niezgodność pisowni 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ę SQL spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false"). Możesz aktywować kolumnę odzyskanych danych, ustawiając opcję rescuedDataColumn na nazwę kolumny podczas odczytu danych, na przykład _rescued_data korzystając z spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>).

Analizator CSV obsługuje trzy tryby podczas analizowania rekordów: PERMISSIVE, DROPMALFORMEDi FAILFAST. W przypadku użycia razem z elementem rescuedDataColumn niezgodność typów danych nie powoduje odrzucenia rekordów w trybie DROPMALFORMED lub zgłaszania błędu w trybie FAILFAST. Tylko uszkodzone rekordy, czyli niekompletne lub źle sformułowane pliki CSV, zostają odrzucone lub zgłaszają błędy.

Gdy rescuedDataColumn jest używane w trybie PERMISSIVE, stosuje się następujące reguły dotyczące uszkodzonych rekordów:

  • Pierwszy wiersz pliku (wiersz nagłówka lub wiersz danych) ustawia oczekiwaną długość wiersza.
  • Wiersz, który ma różną 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 lub badRecordsPath.

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(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<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.

Otwórz notatnik do odczytu plików CSV

Pobierz laptopa

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ą notatnika schematów

Pobierz laptopa

Przykład SQL przy użyciu polecenia read_files:

SELECT * FROM read_files(
  'abfss://<bucket>@<storage-account>.dfs.core.windows.net/<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 notatnik przedstawia najczęstsze pułapki.

Zastrzeżenia dotyczące odczytywania podzestawu kolumn w notatniku dotyczącym plików CSV

Pobierz laptopa