Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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'
)
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/*'
)
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.