hadoop和mapreduce的新用戶,我想創建一個mapreduce作業來對圖像執行一些度量。這就是爲什麼我想知道我是否可以將圖像作爲輸入映射到mapreduce?如果是的話?任何種類的例子使用圖像創建mapreduce作業作爲輸入
感謝
hadoop和mapreduce的新用戶,我想創建一個mapreduce作業來對圖像執行一些度量。這就是爲什麼我想知道我是否可以將圖像作爲輸入映射到mapreduce?如果是的話?任何種類的例子使用圖像創建mapreduce作業作爲輸入
感謝
號。你不能直接,因爲它使用特定類型的網絡優化序列化的數據類型傳遞一個圖像到MapReduce工作。我不是一個圖像處理專家,但我會建議看看HIPI框架。它允許以方便的方式在MapReduce框架之上進行圖像處理。
或者,如果你真的想這樣做,本機Hadoop的方式,你可以首先將圖像文件轉換爲Hadoop Sequence file,然後使用SequenceFileInputFormat處理文件做到這一點。
是的,你完全可以做到這一點。
由於提供的信息有限,我只能給你一個非常一般的答案。無論哪種方式,你需要: 1)您將需要編寫一個自定義的InputFormat,而不是在HDFS位置(如TextInputFormat和SequenceFileInputFormat做)中的文件塊,它實際上傳遞給每個地圖任務圖像的HDFS路徑名稱。從中讀取圖像不會太難。如果你打算在圖像的框架中傳遞一個Reduce階段,你將需要: 2)你需要創建一個「ImageWritable」類來實現Writable(或者WritableComparable,重新鍵入圖像)。在你的write()方法中,你需要將你的圖像序列化爲一個字節數組。當你這樣做時,我要做的是首先向輸出寫入一個int/long,它是你要寫入數組的大小。最後,你需要將數組寫爲字節。在您的read()方法中,您將首先讀取一個int/long(它將描述圖像的有效載荷),創建一個此大小的字節數組,然後將字節完全讀入您的字節數組中到你捕獲的int/long的長度。
我不完全確定你在做什麼,但這就是我如何去做。
任何如何將圖像轉換成hadoop sequene文件的例子? – devosJava 2013-05-03 23:38:39
只是幾分鐘,我寫了一個小代碼來做到這一點,因爲我沒有意識到任何這樣的鏈接。我很快就會貼上你的。 – Tariq 2013-05-04 00:16:13
http://pastebin.com/RWttXN62 – Tariq 2013-05-04 01:07:50