Udostępnij za pośrednictwem


Odczytywanie i zapisywanie w plikach CSV

Ten artykuł zawiera przykłady odczytywania i zapisywania w plikach CSV za pomocą usługi 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:

Opcje

Dla źródeł danych plików CSV można skonfigurować kilka opcji. Zapoznaj się z następującymi artykułami referencyjnymi platformy Apache Spark, aby uzyskać informacje na temat obsługiwanych opcji odczytu i zapisu.

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_recordwartoś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

Pobierz notes

Uratowana kolumna danych

Uwaga

Ta funkcja jest obsługiwana w środowisku Databricks Runtime 8.3 (nieobsługiwanym) 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, DROPMALFORMEDi FAILFAST. W przypadku użycia razem z elementem rescuedDataColumnniezgodność 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 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(
  '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

Pobierz notes

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

Pobierz notes

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.

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

Pobierz notes