2

目前,我正在用Spark對圖像分類進行編程。我需要閱讀所有的圖像到內存中RDD和我的方法如下:Spark如何有效讀取100K圖像?

val images = spark.wholeTextFiles("hdfs://imag-dir/") 

IMAG-DIR是目標圖像上HDFS存儲目錄。使用這種方法,所有的圖像將被加載到內存中,每個圖像將被組織爲「圖像名稱,圖像內容」對。但是,我發現這個過程非常耗時,有沒有更好的方法將大圖像數據加載到spark中?

+0

嘗試將數據放在RAMdisk或SSD上以查看是否在I/O或處理中使用了該時間,以便您更好地瞭解需要解決的問題。您是否已經使用多線程,並且在多核/多CPU系統上運行? http://apache-spark-user-list.1001560.n3.nabble.com/How-to-use-multi-thread-in-RDD-map-function-td15286.html –

+0

@MarkSetchell是的,該程序是多-threaded。我認爲I/O是優化的一個好點,現在我正在開發它。 – Neal

回答

4

我懷疑這可能是因爲你在HDFS上有很多小文件,這是一個問題(小文件問題)。 Here你會發現一些解決問題的建議。

你也可以設置分區數量的合理的數量(minpartitions說法wholetextFiles):至少2倍的內核數量在集羣(看there詳情)。

但總之,除了以上兩個想法,你裝的方式是確定和您的問題在於(假設spark是你的星火上下文)。