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

read haar cascade in distribute mode in hadoop

我正在使用 OpenCV 库在 Hadoop 中使用 Spark 框架进行图像检测。 我能够 运行 在本地文件系统中存在 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);