Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Databricks raadt u aan de binaire bestandsgegevensbron te gebruiken om afbeeldingsgegevens als onbewerkte bytes in het Spark DataFrame te laden. Zie de referentieoplossing voor afbeeldingstoepassingen voor de aanbevolen werkstroom voor het verwerken van afbeeldingsgegevens.
De gegevensbron van de afbeelding biedt een standaard-API voor het laden van afbeeldingsbestanden in Spark DataFrames als gedecodeerde struct, zodat u rechtstreeks toegang hebt tot metagegevens van afbeeldingen, zoals hoogte, breedte, aantal kanalen en onbewerkte pixelgegevens. Het wordt voornamelijk gebruikt in voorverwerkingspijplijnen voor machine learning, waarbij gestructureerde beeldvelden naast pixelgegevens vereist zijn. Azure Databricks ondersteunt de gegevensbron voor afbeeldingen voor batchgewijze leesbewerkingen, inclusief partitiedetectie voor geordende afbeeldingsmappen. Als u afbeeldingsbestanden wilt lezen, geeft u de gegevensbron format op als image.
Prerequisites
Azure Databricks vereist geen aanvullende configuratie om de afbeeldingsgegevensbron te gebruiken.
Options
Gebruik de methoden .option() en .options() van DataFrameReader om de gegevensbron voor afbeeldingen te configureren. Zie de naslaginformatie over spark-API-opties voor een volledige lijst met ondersteunde opties.
Usage
In de volgende voorbeelden ziet u hoe u afbeeldingsbestanden laadt met behulp van de Spark DataFrame-API, metagegevensvelden voor afbeeldingen selecteert, miniaturen van afbeeldingen weergeeft en gedecodeerde afbeeldingsgegevens opslaat in een Delta-tabel.
Afbeeldingsbestanden lezen
Gebruik de Apache Spark DataFrame-API om afbeeldingsbestanden in een DataFrame te laden. U kunt een geneste mapstructuur importeren door een mappad op te geven en partitiedetectie te gebruiken door een pad op te geven met een partitiemap (bijvoorbeeld /path/to/dir/date=2018-01-02/category=automobile).
Python
# Read all images from a directory
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
# Use partition discovery by specifying a partitioned path
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/date=2024-01-01/category=dogs/")
display(df)
Scala
// Read all images from a directory
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
// Use partition discovery by specifying a partitioned path
val partitioned = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/date=2024-01-01/category=dogs/")
partitioned.show()
SQL
-- Read all images from a directory
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Afbeeldingsmetagegevens selecteren
Als u wilt werken met afbeeldingsdimensies of kanaalgegevens zonder de volledige pixelgegevens te verwerken, selecteert u specifieke velden in de image structkolom.
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
metadata = df.select("image.origin", "image.height", "image.width", "image.nChannels")
display(metadata)
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
val metadata = df.select("image.origin", "image.height", "image.width", "image.nChannels")
metadata.show()
SQL
SELECT image.origin, image.height, image.width, image.nChannels FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Afbeeldingsgegevens weergeven
Met de Databricks-functie display worden afbeeldingsminiaturen rechtstreeks in de image kolom weergegeven wanneer u met de gegevensbron van de afbeelding werkt. Zie Afbeeldingen voor ondersteunde weergaveopties.
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.show()
SQL
SELECT * FROM read_files(
'/Volumes/<catalog>/<schema>/<volume>/images/',
format => 'image'
)
Afbeeldingsgegevens opslaan in een Delta-tabel
Sla het DataFrame op in een Delta-tabel om de leesprestaties te verbeteren bij het terug laden van afbeeldingsgegevens.
Note
De afbeeldingsgegevensbron slaat gedecodeerde pixelgegevens op, waardoor het schijfgebruik toeneemt ten opzichte van onbewerkte bytes. Gebruik voor opslagefficiënte persistentie in plaats daarvan de binaire bestandsgegevensbron .
Python
df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Scala
val df = spark.read.format("image").load("/Volumes/<catalog>/<schema>/<volume>/images/")
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")
Uitvoerschema
Afbeeldingsbestanden worden geladen als een DataFrame met één struct-type kolom met de naam image met de volgende velden:
root
|-- image: struct (nullable = true)
| |-- origin: string (nullable = true)
| |-- height: integer (nullable = false)
| |-- width: integer (nullable = false)
| |-- nChannels: integer (nullable = false)
| |-- mode: integer (nullable = false)
| |-- data: binary (nullable = false)
In de volgende velden worden het afbeeldingsbestand en de gedecodeerde pixelgegevens beschreven.
-
origin: het bestandspad van de bronafbeelding. -
height: De hoogte van de afbeelding in pixels. -
width: De breedte van de afbeelding in pixels. -
nChannels: Het aantal kleurkanalen. Typische waarden zijn 1 voor afbeeldingen met grijswaarden, 3 voor gekleurde afbeeldingen (bijvoorbeeld RGB) en 4 voor gekleurde afbeeldingen met alfakanaal. -
mode: Een integervlag die aangeeft hoe het gegevensveld moet worden geïnterpreteerd. Hiermee geeft u het gegevenstype en de kanaalvolgorde op waarin de gegevens worden opgeslagen. De waarde van het veld wordt verwacht (maar niet afgedwongen) te corresponderen met een van de OpenCV-typen die in de volgende tabel worden weergegeven. OpenCV-typen worden gedefinieerd voor 1, 2, 3 of 4 kanalen en verschillende gegevenstypen voor de pixelwaarden. Kanaalvolgorde geeft de volgorde aan waarin de kleuren worden opgeslagen. Als u bijvoorbeeld een typische drie kanaalafbeelding hebt met rode, blauwe en groene componenten, zijn er zes mogelijke bestellingen. De meeste bibliotheken gebruiken RGB of BGR. OpenCV-types met drie (vier) kanalen worden geacht in BGR(A)-volgorde te staan.
Overzicht van typen en nummers in OpenCV (gegevenstypen x aantal kanalen)
| Type | C1 | C2 | C3 | C4 |
|---|---|---|---|---|
| CV_8U | 0 | 8 | 16 | 24 |
| CV_8S | 1 | 9 | 17 | 25 |
| CV_16U | 2 | 10 | 18 | 26 |
| CV_16S | 3 | 11 | 19 | 27 |
| CV_32U | 4 | 12 | 20 | 28 |
| CV_32S | 5 | 13 | 21 | 29 |
| CV_64F | 6 | 14 | 22 | 30 |
-
data: Afbeeldingsgegevens die zijn opgeslagen in een binaire indeling. Afbeeldingsgegevens worden weergegeven als een 3dimensionale matrix met de maatlijnshape (hoogte, breedte, nChannels) en matrixwaarden van het type t die zijn opgegeven door het modusveld. De matrix wordt opgeslagen in de volgorde van de primaire rij.
Limitations
Omdat de gegevensbron voor afbeeldingen afbeeldingsbestanden decodeert tijdens het maken van een DataFrame, neemt de gegevensgrootte toe en gelden de volgende beperkingen:
- Schijfgebruik bij persistent maken: gedecodeerde afbeeldingsgegevens zijn aanzienlijk groter dan onbewerkte bytes. Als u het DataFrame opslaat in een Delta-tabel, slaat u onbewerkte bytes op in plaats van gedecodeerde gegevens om schijfruimte te besparen.
- Shuffleprestaties: Het shuffelen van gedecodeerde beeldgegevens vereist meer schijfruimte en netwerkbandbreedte, wat resulteert in tragere shufflebewerkingen. Stel het decoderen zo lang mogelijk uit in uw pijplijn.
- Vaste decoderingsbibliotheek: De afbeeldingsgegevensbron maakt gebruik van de Javax Image IO-bibliotheek om afbeeldingen te decoderen, waardoor u geen alternatieve decoderingsbibliotheken kunt gebruiken voor betere prestaties of aangepaste decoderingslogica.
Als u deze beperkingen wilt voorkomen, gebruikt u de gegevensbron van het binaire bestand om afbeeldingsgegevens te laden en alleen indien nodig te decoderen.
Aanvullende bronnen
- Binaire bestanden lezen: Als voor uw workload onbewerkte afbeeldingsbytes zijn vereist in plaats van een gedecodeerde struct, voorkomt de gegevensbron van het binaire bestand decoderingsoverhead en beperkingen van de afbeeldingsgegevensbron.