我正在使用OpenCV库在使用Spark框架的Hadoop中进行图像检测。
我可以在本地文件系统中存在Haar文件的本地模式下运行spark程序。
但是,在分布式模式下读取Haar文件时,出现空指针错误,尽管我已在所有群集节点中复制了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共享位置路径。

最佳答案

在spark-submit中添加--files参数后,此问题得以解决。
haar文件分布在所有节点上。我们只需要在源代码中提供文件名:

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

关于opencv - 在hadoop中以分发模式读取haar级联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40434815/

10-10 08:50