Dela via


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ådata. Se Referenslösning för bildprogram för det rekommenderade arbetsflödet för att hantera bilddata.

Bilddatakällan abstraherar från information om bildrepresentationer och tillhandahåller ett standard-API för att läsa in bilddata. Om du vill läsa avbildningsfiler 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-typ kolumn som heter 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 du tolkar datafältet. 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 OpenCV-typerna som visas i följande tabell. OpenCV-typer definieras för 1, 2, 3 eller 4 kanaler och flera datatyper för pixelvärdena. Kanalordningen 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ällningar. De flesta bibliotek använder antingen RGB eller BGR. Tre (fyra) kanals OpenCV-typer förväntas vara i BGR(A)-ordning.

    Mappning av 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_32U 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 rad-större ordning.

Visa bilddata

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

Notebook-exempel: Läsa och skriva data till bildfiler

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ådata i stället för de avkodade data för att spara diskutrymme.
  2. Blanda partitionerna: Om du blandar avkodade bilddata krävs mer diskutrymme och nätverksbandbredd, vilket resulterar i långsammare blandning. Du bör fördröja avkodningen av bilden 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.