Čtení souborů CSV
Tento článek obsahuje příklady čtení souborů CSV pomocí Azure Databricks pomocí Pythonu, Scaly, R a SQL.
Poznámka:
Databricks doporučuje funkci read_files tabulkové hodnoty, aby uživatelé SQL mohli číst soubory CSV. read_files
je k dispozici ve službě Databricks Runtime 13.3 LTS a vyšší.
Můžete také použít dočasné zobrazení. Pokud používáte SQL k přímému čtení dat CSV bez použití dočasných zobrazení nebo read_files
platí následující omezení:
- Nemůžete zadat možnosti zdroje dat.
- Pro data nemůžete zadat schéma .
Možnosti
Pro zdroje dat souborů CSV můžete nakonfigurovat několik možností. Podporované možnosti čtení najdete v následujících referenčních článcích k Apache Sparku:
Tento článek se zabývá jen čtením csv, ale v následujících referenčních článcích o Apache Sparku se dozvíte o podporovaných možnostech zápisu:
Práce s poškozenými záznamy CSV
Při čtení souborů CSV se zadaným schématem je možné, že data v souborech neodpovídají schématu. Například pole obsahující název města nebude parsovat jako celé číslo. Důsledky závisí na režimu, ve kterém se analyzátor spouští:
PERMISSIVE
(výchozí): Hodnoty null se vloží pro pole, která nelze správně analyzovat.DROPMALFORMED
: zahodí řádky obsahující pole, která nelze analyzovat.FAILFAST
: Přeruší čtení, pokud jsou nalezena nějaká poškozená data.
Pokud chcete nastavit režim, použijte tuto mode
možnost.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
PERMISSIVE
V režimu je možné zkontrolovat řádky, které nelze správně analyzovat pomocí jedné z následujících metod:
- Můžete zadat vlastní cestu k možnosti
badRecordsPath
záznamu poškozených záznamů do souboru. - Sloupec můžete přidat
_corrupt_record
do schématu zadaného objektu DataFrameReader a zkontrolovat poškozené záznamy ve výsledném datovém rámci.
Poznámka:
Tato badRecordsPath
možnost má přednost před _corrupt_record
chybnými řádky zapsanými do zadané cesty se ve výsledném datovém rámci nezobrazí.
Výchozí chování poškozených záznamů se změní při použití sloupce zachráněných dat.
Vyhledání poškozených řádků v poznámkovém bloku
Sloupec zachráněných dat
Poznámka:
Tato funkce je podporovaná v Databricks Runtime 8.3 (EoS) a novějších.
Když použijete PERMISSIVE
režim, můžete povolit, aby zachycovaný datový sloupec zaznamenával všechna data, která nebyla analyzována, protože jedno nebo více polí v záznamu má jeden z následujících problémů:
- Chybí ze zadaného schématu.
- Neodpovídá datovému typu zadaného schématu.
- Neshoduje se s názvy polí v zadaném schématu.
Uložený datový sloupec se vrátí jako dokument JSON obsahující sloupce, které byly uloženy, a cestu ke zdrojovému souboru záznamu. Chcete-li odebrat cestu ke zdrojovému souboru ze sloupce zachráněných dat, můžete nastavit konfiguraci spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
SQL . Záchranný datový sloupec můžete povolit nastavením možnosti rescuedDataColumn
na název sloupce při čtení dat, například _rescued_data
pomocí spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
.
Analyzátor CSV podporuje při analýze záznamů tři režimy: PERMISSIVE
, DROPMALFORMED
a FAILFAST
. Při použití společně s datovým rescuedDataColumn
typem neshody nezpůsobí vyřazení záznamů v DROPMALFORMED
režimu nebo vyvolání chyby v FAILFAST
režimu. Vyřadí se jenom poškozené záznamy ( tj. neúplné nebo poškozené sdílené svazky clusteru) nebo způsobí chyby.
Pokud rescuedDataColumn
se používá v PERMISSIVE
režimu, platí pro poškozené záznamy následující pravidla:
- První řádek souboru (řádek záhlaví nebo datový řádek) nastaví očekávanou délku řádku.
- Řádek s jiným počtem sloupců se považuje za neúplný.
- Neshody datových typů se nepovažují za poškozené záznamy.
- Pouze neúplné a poškozené záznamy CSV jsou považovány za poškozené a zaznamenané do
_corrupt_record
sloupce nebobadRecordsPath
.
Příklad SQL: Čtení souboru CSV
Následující příklad SQL načte soubor CSV pomocí 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')
Příklady Scala, R a Pythonu: Čtení souboru CSV
Následující poznámkový blok ukazuje, jak číst soubor, zobrazit ukázková data a vytisknout schéma dat pomocí Scala, R a Pythonu. Příklady v této části používají datovou sadu diamantů. Zadejte cestu k datové sadě a také všechny možnosti, které chcete.
Čtení poznámkového bloku souborů CSV
Příklad: Zadání schématu
Pokud je známo schéma souboru CSV, můžete určit požadované schéma pro čtenáře CSV s schema
možností.
Čtení souborů CSV s poznámkovým blokem schématu
Příklad SQL s využitím read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Příklad: Nástrahy čtení podmnožina sloupců
Chování analyzátoru sdíleného svazku clusteru závisí na sadě přečtených sloupců. Pokud je zadané schéma nesprávné, mohou se výsledky výrazně lišit v závislosti na podmnožině sloupců, ke kterým se přistupuje. Následující poznámkový blok představuje nejběžnější nástrahy.