映像
重要
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 期間解碼影像檔案、增加資料大小,並在下列案例中引入限制:
- 保存 DataFrame:如果您想要在 Delta 資料表中保存 DataFrame 以便存取,您應該保存未經解碼的資料,而不是已解碼的資料以節省磁碟空間。
- 隨機順序分割區:隨機解碼的影像資料會佔用更多的磁碟空間和網路頻寬,這會導致隨機顯示速度較慢。 您應該盡可能延遲影像解碼。
- 選擇其他解碼方法:影像資料來源會使用 javax 的 Image IO 程式庫來解碼影像,這可防止您選擇其他影像解碼程式庫,以提升效能或實施自訂解碼邏輯。
使用二進位檔案資料來源並僅視需要載入影像資料和解碼,即可避免這些限制。