共用方式為


映像

重要

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

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

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

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

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

影像結構

影像檔案會載入為 DataFrame,其中包含具有下列欄位呼叫 image 的單一結構類型資料欄:

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

這些欄位為:

  • nChannels:色彩通道的數目。 灰階影像的一般值為 1、彩色影像為 3(例如 RGB),而 4 則代表具有 Alpha 色板的彩色影像。

  • mode:指出如何解譯資料欄位的整數旗標。 它會指定資料儲存其中的資料類型和通道順序。 欄位的值預期(但未強制執行),以對應以下資料表中顯示的其中一個 OpenCV 類型。 OpenCV 類型是針對像素值的 1、2、3 或 4 通道和數個資料類型所定義。 通道順序會指定儲存色彩的順序。 例如,如果您有具有紅色、藍色和綠色元件的一般三個通道影像,則有六個可能的順序。 大部分的程式庫都會使用 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)和模式欄位所指定的類型 t 陣列值來呈現 3 維度陣列。 陣列是以列為主要順序進行儲存。

顯示影像資料

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

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

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

影像資料來源筆記本

取得筆記本

影像資料來源的限制

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

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

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