Bild

Viktigt

Databricks rekommenderar att du använder datakällan för binära filer för att läsa in bilddata i Spark DataFrame som råbyte. Se Referenslösning för bildprogram för det rekommenderade arbetsflödet för att hantera bilddata.

Bilddatakällan abstraherar från informationen om bildrepresentationer och tillhandahåller ett standard-API för att läsa in bilddata. Om du vill läsa bildfiler anger du datakällan format som image.

df = spark.read.format("image").load("<path-to-image-data>")

Liknande API:er finns för Scala, Java och R.

Du kan importera en kapslad katalogstruktur (till exempel använda en sökväg som /path/to/dir/) och du kan använda partitionsidentifiering genom att ange en sökväg med en partitionskatalog (det vill säga en sökväg som /path/to/dir/date=2018-01-02/category=automobile).

Bildstruktur

Bildfiler läses in som en DataFrame som innehåller en enda struct-typkolumn med namnet image med följande fält:

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

där fälten är:

  • nChannels: Antalet färgkanaler. Typiska värden är 1 för gråskalebilder, 3 för färgade bilder (till exempel RGB) och 4 för färgade bilder med alfakanal.

  • mode: Heltalsflagga som anger hur datafältet ska tolkas. Den anger datatypen och kanalordningen som data lagras i. Värdet för fältet förväntas (men framtvingas inte) för att mappas till någon av de OpenCV-typer som visas i följande tabell. OpenCV-typer definieras för 1, 2, 3 eller 4 kanaler och flera datatyper för pixelvärdena. Kanalordning anger i vilken ordning färgerna lagras. Om du till exempel har en typisk trekanalsbild med röda, blå och gröna komponenter finns det sex möjliga beställningsfunktioner. De flesta bibliotek använder antingen RGB eller BGR. OpenCV-typer med tre (fyra) kanaler förväntas vara i BGR(A)-ordning.

    Karta över typ till tal i OpenCV (datatyper x antal kanaler)

    Typ 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_32S 4 12 20 28
    CV_32S 5 13 21 29
    CV_64F 6 14 22 30
  • data: Bilddata som lagras i binärt format. Bilddata representeras som en 3-dimensionell matris med dimensionsformen (höjd, bredd, nChannels) och matrisvärden av typen t som anges av lägesfältet. Matrisen lagras i radordning.

Visa bilddata

Funktionen Databricks display stöder visning av bilddata. Se Bilder.

Notebook-fil

Följande notebook-fil visar hur du läser och skriver data till bildfiler.

Notebook-fil för bilddatakälla

Hämta notebook-fil

Begränsningar för bilddatakälla

Bilddatakällan avkodar bildfilerna när Spark DataFrame skapas, ökar datastorleken och introducerar begränsningar i följande scenarier:

  1. Bevara DataFrame: Om du vill spara DataFrame i en Delta-tabell för enklare åtkomst bör du spara rådatabyte i stället för de avkodade data för att spara diskutrymme.
  2. Blanda partitionerna: Att blanda avkodade bilddata tar mer diskutrymme och nätverksbandbredd, vilket resulterar i långsammare blandning. Du bör fördröja avkodningen av avbildningen så mycket som möjligt.
  3. Välja annan avkodningsmetod: Bilddatakällan använder bild-I/O-biblioteket i javax för att avkoda bilden, vilket hindrar dig från att välja andra bildkodningsbibliotek för bättre prestanda eller implementera anpassad avkodningslogik.

Dessa begränsningar kan undvikas genom att använda datakällan för binära filer för att endast läsa in bilddata och avkodning efter behov.