映像

重要

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) 和模式欄位所指定的類型陣列值來表示為 3 維陣列。 陣列會以資料列主要順序儲存。

顯示影像資料

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

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

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

影像資料來源筆記本

取得筆記本

影像資料來源的限制

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

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

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