我正在使用 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);
关于opencv - 在 hadoop 中以分布式模式读取 haar 级联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40434815/