Afbeelding
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 afbeeldingsgegevensbron abstraheert van de details van afbeeldingsweergaven en biedt een standaard-API voor het laden van afbeeldingsgegevens. Als u afbeeldingsbestanden wilt lezen, geeft u de gegevensbron format
op als image
.
df = spark.read.format("image").load("<path-to-image-data>")
Er bestaan vergelijkbare API's voor Scala, Java en R.
U kunt een geneste mapstructuur importeren (bijvoorbeeld een pad zoals /path/to/dir/
) en u kunt partitiedetectie gebruiken door een pad op te geven met een partitiemap (dat wil gezegd, een pad zoals /path/to/dir/date=2018-01-02/category=automobile
).
Afbeeldingsstructuur
Afbeeldingsbestanden worden geladen als een DataFrame met één struct-type kolom die wordt aangeroepen image
met de volgende velden:
image: struct containing all the image data
|-- origin: string representing the source URI
|-- height: integer, image height in pixels
|-- width: integer, image width in pixels
|-- nChannels
|-- mode
|-- data
waar de velden zich bevinden:
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
: Vlag geheel getal 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) om toe te wijzen aan een van de OpenCV-typen die worden weergegeven in de volgende tabel. 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. Er worden naar verwachting drie (vier) kanaal OpenCV-typen in BGR(A)-volgorde geplaatst.Toewijzing van type aan getallen 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.
Afbeeldingsgegevens weergeven
De Databricks-functie display
ondersteunt het weergeven van afbeeldingsgegevens. Zie afbeeldingen.
Voorbeeld van notitieblok: gegevens lezen en schrijven naar afbeeldingsbestanden
In het volgende notebook ziet u hoe u gegevens kunt lezen en schrijven naar afbeeldingsbestanden.
Notitieblok voor afbeeldingsgegevensbron
Beperkingen van afbeeldingsgegevensbron
De afbeeldingsgegevensbron ontsleutelt de afbeeldingsbestanden tijdens het maken van het Spark DataFrame, verhoogt de gegevensgrootte en introduceert beperkingen in de volgende scenario's:
- Het DataFrame behouden: Als u het DataFrame wilt behouden in een Delta-tabel voor eenvoudigere toegang, moet u de onbewerkte bytes behouden in plaats van de gedecodeerde gegevens om schijfruimte te besparen.
- De partities versnipperen: door de gedecodeerde afbeeldingsgegevens te versnipperen, neemt u meer schijfruimte en netwerkbandbreedte in beslag, wat resulteert in tragere shuffling. U moet het decoderen van de afbeelding zo veel mogelijk vertragen.
- Een andere decoderingsmethode kiezen: de gegevensbron van de installatiekopieën maakt gebruik van de AfbeeldingS-IO-bibliotheek van Javax om de installatiekopieën te decoderen, waardoor u geen andere bibliotheken voor afbeeldingscodering kunt kiezen voor betere prestaties of het implementeren van aangepaste decoderingslogica.
Deze beperkingen kunnen worden vermeden door de gegevensbron van het binaire bestand te gebruiken om afbeeldingsgegevens te laden en alleen indien nodig te decoderen.