我使用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共享位置路径。
1条答案
按热度按时间qv7cva1a1#
在spark submit中添加--files参数后,这个问题就解决了。haar文件分布在所有节点上。我们只需要在源代码中提供文件名: