在hadoop中以分布式模式读取haar级联

ibrsph3r  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(391)

我使用opencv库在hadoop中使用spark框架进行图像检测。我能够在本地模式下运行spark程序,其中haar文件存在于本地文件系统中。但是我在分布式模式下读取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共享位置路径。

qv7cva1a

qv7cva1a1#

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

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

相关问题