Bináris fájlok olvasása

Azure Databricks támogatja a bináris fájl adatforrását, amely bináris fájlokat olvas be, és az egyes fájlokat egyetlen rekordmá alakítja, amely a fájl nyers tartalmát és metaadatait tartalmazza. Gyakran használják strukturálatlan adatok, például képek, hangfájlok vagy PDF-fájlok betöltésére az alsóbb rétegbeli feldolgozáshoz vagy az ML-következtetéshez. Bináris fájlok olvasásához adja meg az adatforrást format a következőként binaryFile: .

Prerequisites

Azure Databricks nem igényel további konfigurációt a bináris fájlok használatához.

Beállítások

A binárisfájl-adatforrás konfigurálásához használja a DataFrameReader.option() és .options() metódusát. A támogatott lehetőségek teljes listáját a Spark API-beállításokra vonatkozó hivatkozásban találja.

Kimeneti séma

A bináris fájl adatforrása létrehoz egy DataFrame-et a következő oszlopokkal, valamint a partícióoszlopokkal:

  • path (StringType): A fájl elérési útja.
  • modificationTime (TimestampType): A fájl módosítási ideje. Egyes Hadoop FileSystem-implementációkban előfordulhat, hogy ez a paraméter nem érhető el, és az érték alapértelmezett értékre van állítva.
  • length (LongType): A fájl hossza bájtban.
  • content (BinaryType): A fájl tartalma.

Usage

Az alábbi példák bemutatják a bináris fájlok betöltését a Spark DataFrame API és az SQL használatával, a fájltípus szerinti szűrést, a kép előnézetének megjelenítését és a Delta-táblába való mentést a jobb olvasási teljesítmény érdekében.

Bináris fájlok olvasása

Az Apache Spark DataFrame API-val bináris fájlokat tölthet be egy DataFrame-be átalakítás, megjelenítés vagy továbbfeldolgozás céljából.

Python

df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
display(df)

Scala

val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
df.show()

SQL

SELECT path, length, modificationTime FROM read_files(
  '/Volumes/<catalog>/<schema>/<volume>/images/',
  format => 'binaryFile'
)

Olvasási beállítások konfigurálása

Ha egy adott lobmintának megfelelő elérési utakkal szeretné betölteni a fájlokat, miközben megtartja a partíciófelderítés viselkedését, használhatja a pathGlobFilter lehetőséget. Az alábbi kód beolvassa az összes JPG-fájlt a bemeneti könyvtárból partíciófelderítéssel:

Python

df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")

Scala

val df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")

SQL

SELECT * FROM read_files(
  '/Volumes/<catalog>/<schema>/<volume>/images/',
  format => 'binaryFile',
  pathGlobFilter => '*.jpg'
)

Ha figyelmen kívül szeretné hagyni a partíciófelderítést, és rekurzív módon keres fájlokat a bemeneti könyvtárban, használja a recursiveFileLookup lehetőséget. Ez a beállítás akkor is megkeresi a beágyazott könyvtárakat, ha a nevük nem követi az olyan partícióelnevezési sémát, mint a date=2019-07-01. Az alábbi kód az összes JPG-fájlt rekurzívan olvassa be a bemeneti könyvtárból, és figyelmen kívül hagyja a partíciófelderítést:

Python

df = (spark.read.format("binaryFile")
  .option("pathGlobFilter", "*.jpg")
  .option("recursiveFileLookup", "true")
  .load("/Volumes/<catalog>/<schema>/<volume>/images/"))

Scala

val df = spark.read.format("binaryFile")
  .option("pathGlobFilter", "*.jpg")
  .option("recursiveFileLookup", "true")
  .load("/Volumes/<catalog>/<schema>/<volume>/images/")

SQL

SELECT * FROM read_files(
  '/Volumes/<catalog>/<schema>/<volume>/images/',
  format => 'binaryFile',
  pathGlobFilter => '*.jpg',
  recursiveFileLookup => true
)

Képek betöltése és megjelenítése

A Databricks azt javasolja, hogy a bináris fájl adatforrásával töltsön be képadatokat. A Databricks display függvény támogatja a bináris adatforrással betöltött képadatok megjelenítését.

Ha az összes betöltött fájl rendelkezik képkiterjesztéssel rendelkező fájlnévvel, a rendszer automatikusan engedélyezi a kép előnézetét:

Python

df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)    # image thumbnails are rendered in the "content" column

Scala

val df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()

SQL

SELECT * FROM read_files(
  '/Volumes/<catalog>/<schema>/<volume>/images/',
  format => 'binaryFile'
)

kép előnézete

A kép előnézeti funkcióját úgy is kényszerítheti, hogy a mimeType opciót egy "image/*" sztringértékkel használja a bináris oszlop annotálásához. A rendszer a képeket a bináris tartalom formátumadatai alapján dekódolja. A támogatott képtípusok a következőkbmp: , gifjpegés png. A nem támogatott fájlok hibás képikonként jelennek meg.

Python

df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)

Scala

val df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()

SQL

SELECT * FROM read_files(
  '/Volumes/<catalog>/<schema>/<volume>/images/',
  format => 'binaryFile',
  mimeType => 'image/*'
)

kép előnézete nem támogatott fájltípussal

Lásd : Referenciamegoldás képalkalmazásokhoz az ajánlott munkafolyamathoz a képadatok kezeléséhez.

Mentés Delta-táblába

Az adatok visszatöltésekor az olvasási teljesítmény javítása érdekében Azure Databricks javasolja a bináris fájlokból egy Delta-táblába betöltött adatok mentését.

Python

df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")

Scala

df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")

További források

  • Képfájlok olvasása: Ha a számítási feladathoz strukturált képmezőkre, például magasságra, szélességre és csatornaadatokra van szükség a nyers bájtok helyett, a kép adatforrása dekódolt sémát biztosít.