Megosztás a következőn keresztül:


Olvasás és írás CSV-fájlokba

Ez a cikk példákat tartalmaz CSV-fájlok olvasására és írására az Azure Databricks használatával Python, Scala, R és SQL használatával.

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_filesaz 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 és írási lehetőségekről az alábbi Apache Spark-referenciacikkek nyújtanak segítséget.

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ően
  • DROPMALFORMED: nem elemezhető mezőket tartalmazó sorokat csepegtet
  • FAILFAST: 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

Jegyzetfüzet beszerzése

Mentett adatoszlop

Feljegyzés

Ez a funkció a Databricks Runtime 8.3-ban (nem támogatott) és újabb verziókban támogatott.

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 rescuedDataColumnhaszná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 badRecordsPatha _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

Jegyzetfüzet beszerzése

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

Jegyzetfüzet beszerzése

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.

A CSV-fájljegyzetfüzet oszlopainak egy részhalmazának olvasására vonatkozó figyelmeztetések

Jegyzetfüzet beszerzése