代码在这里:github链接
错误是:
ren:null at[]]:java.lang.illegalargumentexception:在org.apache.pig.backend.hadoop.executionengine.physicalayer.physicaloperator.getnext(physicaloperator)中找不到org.apache.lucene.analysis.tokenattributes.offsetattribute的实现类。java:338)
在org.apache.pig.backend.hadoop.executionengine.physicallayer.relationaloperators.poforeach.processplan(poforeach。java:378)
在org.apache.pig.backend.hadoop.executionengine.physicallayer.relationaloperators.poforeach.getnexttuple(poforeach。java:298)
位于org.apache.pig.backend.hadoop.executionengine.mapreducelayer.piggenericmapbase.runpipeline(piggenericmapbase)。java:282)
在org.apache.pig.backend.hadoop.executionengine.mapreducelayer.piggenericmapbase.map(piggenericmapbase。java:277)
在org.apache.pig.backend.hadoop.executionengine.mapreducelayer.piggenericmapbase.map(piggenericmapbase。java:64)
在org.apache.hadoop.mapreduce.mapper.run(mapper。java:144)
在org.apache.hadoop.mapred.maptask.runnewmapper(maptask。java:764)
在org.apache.hadoop.mapred.maptask.run(maptask。java:370)
在org.apache.hadoop.mapred.localjobrunner$job.run(localjobrunner。java:212)
原因:java.lang.illegalargumentexception:找不到org.apache.lucene.analysis.tokenattributes.offsetattribute的实现类
在org.apache.lucene.util.attributesource$attributefactory$defaultattributefactory.getclassforinterface(attributesource。java:94)
在org.apache.lucene.util.attributesource$attributefactory$defaultattributefactory.createattributeinstance(attributesource。java:67)
在org.apache.lucene.util.attributesource.addattribute(attributesource。java:276)
在org.apache.lucene.analysis.standard.standardtokenizer。java:171)
在datafu.pig.text.lucene.ngramtokenize.exec(ngramtokenize。java:48)
在datafu.pig.text.lucene.ngramtokenize.exec(ngramtokenize。java:33)
在org.apache.pig.backend.hadoop.executionengine.physicallayer.expressionoperators.pouserfunc.getnext(pouserfunc。java:330)
位于org.apache.pig.backend.hadoop.executionengine.physicallayer.expressionoperators.pouserfunc.getnextdatabag(pouserfunc。java:374)
位于org.apache.pig.backend.hadoop.executionengine.physicallayer.physicaloperator.getnext(physicaloperator)。java:309)
... 9个以上
1条答案
按热度按时间tuwxkamq1#
这似乎是 Package 问题。在构建datafu时,我没有找到
o.a.lucene.analysis.tokenatributes.OffsetAttributeImpl
在datafu-1.2.1-SNAPSHOT.jar
lucene的attributesource在运行时查找属性类的实现,因此有必要打包o.a.lucene.analysis.tokenatributes.OffsetAttributeImpl
在datafu-1.2.1-SNAPSHOT.jar
除了o.a.lucene.analysis.tokenatributes.OffsetAttribute
班级。其他属性类也可能会遇到这个问题。
据我所知,autojar在编译时显式地遵循类引用,以确定最终jar中的内容。这就是为什么它不选择属性impl类,这些类在运行时被解析。
我对autojar还不太熟悉,所以建议进行修复,但是如果有一种方法可以显式地包含类,那么应该包含
org.apache.lucene.analysis.tokenattributes.*Impl