CSV-fájlok olvasása
Ez a cikk példákat tartalmaz a CSV-fájlokNak az Azure Databricksben a Python, a Scala, az R és az SQL használatával történő olvasására.
Feljegyzés
A Databricks az SQL-felhasználók read_files táblaértékű függvényét javasolja CSV-fájlok olvasásához. read_files
a Databricks Runtime 13.3 LTS-ben és újabb verziókban érhető el.
Ideiglenes nézetet is használhat. Ha az SQL-t használja a CSV-adatok közvetlen olvasására ideiglenes nézetek használata nélkül, vagy read_files
az alábbi korlátozások érvényesek:
Beállítások
A CSV-fájl adatforrásaihoz több lehetőséget is konfigurálhat. A támogatott olvasási lehetőségekért tekintse meg az alábbi Apache Spark-referenciacikkeket:
Ez a cikk csak a CSV olvasását ismerteti, de a támogatott írási lehetőségekről az alábbi Apache Spark-referenciacikkekben tájékozódhat:
Helytelen formátumú CSV-rekordok használata
Ha csv-fájlokat olvas egy megadott sémával, lehetséges, hogy a fájlok adatai nem egyeznek a sémával. A város nevét tartalmazó mező például nem egész számként értelmezi. A következmények attól függenek, hogy az elemző milyen módon fut:
PERMISSIVE
(alapértelmezett): a program null értékeket szúr be olyan mezőkhöz, amelyek nem elemezhetők megfelelőenDROPMALFORMED
: nem elemezhető mezőket tartalmazó sorokat csepegtetFAILFAST
: megszakítja az olvasást, ha hibásan formázott adatok találhatók
A mód beállításához használja a mode
lehetőséget.
diamonds_df = (spark.read
.format("csv")
.option("mode", "PERMISSIVE")
.load("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv")
)
Ebben a PERMISSIVE
módban az alábbi módszerek egyikével megvizsgálhatók azok a sorok, amelyeket nem sikerült megfelelően elemezni:
- Megadhat egy egyéni elérési utat a sérült rekordok fájlba történő rögzítésének lehetőségéhez
badRecordsPath
. - Az oszlopot
_corrupt_record
hozzáadhatja a DataFrameReaderhez biztosított sémához az eredményül kapott DataFrame sérült rekordjainak áttekintéséhez.
Feljegyzés
A badRecordsPath
beállítás elsőbbséget _corrupt_record
élvez, ami azt jelenti, hogy a megadott elérési útra írt hibásan formázott sorok nem jelennek meg az eredményül kapott DataFrame-ben.
A hibásan formázott rekordok alapértelmezett viselkedése megváltozik a mentett adatoszlop használatakor.
Hibásan formázott sorok jegyzetfüzetének megkeresése
Mentett adatoszlop
Feljegyzés
Ezt a funkciót a Databricks Runtime 8.3 (EoS) és újabb verziók támogatják.
A mód használatakor PERMISSIVE
engedélyezheti, hogy a mentett adatoszlop rögzítse azokat az adatokat, amelyeket nem elemeztek, mert egy rekord egy vagy több mezője az alábbi problémák egyikével jár:
- Hiányzik a megadott sémából.
- Nem egyezik a megadott séma adattípusával.
- A megadott séma mezőneveivel nem egyezik a kis- és nagybetűk eltérése.
A mentett adatoszlop JSON-dokumentumként lesz visszaadva, amely a mentett oszlopokat és a rekord forrásfájl-elérési útját tartalmazza. Ha el szeretné távolítani a forrásfájl elérési útját a mentett adatoszlopból, beállíthatja az SQL-konfigurációt spark.conf.set("spark.databricks.sql.rescuedDataColumn.filePath.enabled", "false")
. A mentett adatoszlopot úgy engedélyezheti, hogy az adatok olvasásakor oszlopnévre állítja a beállítást rescuedDataColumn
, például _rescued_data
a következővel spark.read.option("rescuedDataColumn", "_rescued_data").format("csv").load(<path>)
: .
A CSV-elemző három módot támogat a rekordok elemzésekor: PERMISSIVE
, DROPMALFORMED
és FAILFAST
. Ha együtt rescuedDataColumn
használják, az adattípus eltérései nem okoznak rekordokat módban, DROPMALFORMED
és nem jeleznek hibát FAILFAST
módban. A rendszer csak a sérült rekordokat – azaz hiányos vagy hibásan formázott CSV-t – elveti vagy hibát jelez.
Ha rescuedDataColumn
módban használjákPERMISSIVE
, a sérült rekordokra a következő szabályok vonatkoznak:
- A fájl első sora (fejlécsor vagy adatsor) beállítja a várt sorhosszt.
- A különböző számú oszlopot tartalmazó sorok hiányosnak minősülnek.
- Az adattípus eltérései nem tekinthetők sérült rekordnak.
- A rendszer csak a hiányos és hibásan formázott CSV-rekordokat tekinti sérültnek, és az oszlopban vagy
badRecordsPath
a_corrupt_record
.
SQL-példa: CSV-fájl olvasása
Az alábbi SQL-példa egy CSV-fájlt olvas be a használatával 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')
Scala-, R- és Python-példák: CSV-fájl olvasása
Az alábbi jegyzetfüzet bemutatja, hogyan olvashat be egy fájlt, jeleníthet meg mintaadatokat, és hogyan nyomtathatja ki az adatsémát a Scala, az R és a Python használatával. Az ebben a szakaszban szereplő példák a gyémánt adatkészletet használják. Adja meg az adathalmaz elérési útját, valamint a kívánt beállításokat.
CSV-fájlok jegyzetfüzetének olvasása
Példa: Séma megadása
Ha a CSV-fájl sémája ismert, megadhatja a kívánt sémát a CSV-olvasónak a schema
beállítással.
CSV-fájlok olvasása sémajegyzetfüzettel
SQL-példa a következő használatával read_files
:
SELECT * FROM read_files(
's3://<bucket>/<path>/<file>.csv',
format => 'csv',
header => false,
schema => 'id string, date date, event_time timestamp')
Példa: Az oszlopok egy részhalmazának olvasásának buktatói
A CSV-elemző viselkedése az olvasott oszlopok készletétől függ. Ha a megadott séma helytelen, az eredmények jelentősen eltérhetnek a elért oszlopok részhalmazától függően. Az alábbi jegyzetfüzet a leggyakoribb buktatókat mutatja be.