2016-11-05 50 views
1

我使用OpenCV庫在Hadoop中使用Spark框架進行圖像檢測。 我能夠在Haar文件存在於本地文件系統中的本地模式下運行spark程序。 但是我在分佈式模式下讀取Haar文件時出現空指針錯誤儘管我已將haar文件複製到所有羣集節點中,並在代碼中提供了絕對路徑。在hadoop中以散佈模式閱讀haar級聯

String fileloc ="/home/centos/haarcascade_frontalface_alt.xml" 
    CascadeClassifier faceDetector = new CascadeClassifier(fileloc); 

Error: 
    Caused by: java.lang.NullPointerException 
     at javax.xml.bind.DatatypeConverterImpl.guessLength(DatatypeConverterImpl.java:658) 
     at javax.xml.bind.DatatypeConverterImpl._parseBase64Binary(DatatypeConverterImpl.java:696) 
     at javax.xml.bind.DatatypeConverterImpl.parseBase64Binary(DatatypeConverterImpl.java:438) 
     at javax.xml.bind.DatatypeConverter.parseBase64Binary(DatatypeConverter.java:342) 
     at com.lb.customlogic.impl.CustomLogicImpl.process(CustomLogicImpl.java:82) 
     ... 20 more 

我試着用前綴擴展名file://,file:/和file:///,但那些對我來說並不適合。 是否需要在前綴中添加任何額外內容以在程序執行期間讀取文件? 由於Opencv不支持Hadoop,我認爲我無法提供haar文件的HDFS共享位置路徑。

+0

我可以在spark-submit中使用--files讀取executors中的haar文件。我檢查了--files選項的理論定義,但我不確定它的實現 – Saurabh

回答

0

在spark-submit中添加--files參數後解決了此問題。 haar文件分佈在所有節點上。我們只需要在源代碼中提供文件名:

String fileloc ="haarcascade_frontalface_alt.xml" 
CascadeClassifier faceDetector = new CascadeClassifier(fileloc);