共用方式為


映像

重要

Databricks 建議您使用二進位檔案資料來源,將影像資料載入 Spark DataFrame 做為原始位元組。 如需處理影像資料的建議工作流程,請參閱影像應用程式的參考解決方案

影像資料來源會從影像呈現的詳細資料中擷取,並提供標準 API 來載入影像資料。 若要讀取影像檔,請將資料來源 format 指定為 image

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

Scala、Java 和 R 也有類似的 API。

您可以匯入巢狀目錄結構(例如,使用 /path/to/dir/之類的路徑),而且您可以透過指定具有 partition 目錄的路徑(也就是 /path/to/dir/date=2018-01-02/category=automobile的路徑)來使用 partition 檢索。

影像結構

影像檔案會載入為 DataFrame,其中包含名為 image 的單一結構類型 column,並具有下列字段:

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

where 欄位如下:

  • nChannels:色彩通道的數目。 一般 values 設為 1 表示灰階影像,設為 3 則用於彩色影像(例如 RGB),設為 4 則代表包含 alpha 通道的彩色影像。

  • mode:指出如何解譯資料欄位的整數旗標。 它會指定資料儲存其中的資料類型和通道順序。 預期欄位的值(但未強制執行)應對應至下列其中一個 OpenCV 類型,如 table所示。 OpenCV 類型定義於 1、2、3 或 4 個通道,以及圖元 values的數個數據類型。 通道順序會指定儲存色彩的順序。 例如,如果您有具有紅色、藍色和綠色元件的一般三個通道影像,則有六個可能的順序。 大部分的程式庫都會使用 RGB 或 BGR。 三(四)通道 OpenCV 類型預計將以 BGR (A) 順序排列。

    OpenCV 中的類型至數字的對應(資料類型 x 通道數目)

    類型 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:以二進位格式儲存的影像資料。 影像數據會被表示為一個具有維度形狀(高度、寬度、nChannels)的三維陣列,和由模式欄位指定的類型為 values 的陣列。 陣列是以列為主要順序進行儲存。

顯示影像資料

Databricks display 函式支持顯示影像資料。 請參閱影像

筆記本範例:讀取和寫入 資料至影像檔案

下列筆記本示範如何將資料讀取和寫入影像檔案。

影像資料來源筆記本

Get 筆記本

影像資料來源的限制

影像資料來源會在建立 Spark DataFrame 期間解碼影像檔案、增加資料大小,並在下列案例中引入限制:

  1. 保存 DataFrame:如果您想要將 DataFrame 保存到 Delta table,以便更容易存取,您應該保存未經處理的位元組,而不是譯碼的數據來節省磁碟空間。
  2. 隨機順序分割區:隨機解碼的影像資料會佔用更多的磁碟空間和網路頻寬,這會導致隨機顯示速度較慢。 您應該盡可能延遲影像解碼。
  3. 選擇其他解碼方法:影像資料來源會使用 javax 的 Image IO 程式庫來解碼影像,這可防止您選擇其他影像解碼程式庫,以提升效能或實施自訂解碼邏輯。

使用二進位檔案資料來源並僅視需要載入影像資料和解碼,即可避免這些限制。