2013-06-14 3 views
0

Я пытаюсь создать Pig UDF, который извлекает местоположения, упомянутые в твиттере, используя пакет Stanford CoreNLP, сопряженный с API-интерфейсом Scista. Он отлично работает при запуске локально с «SBT перспективе», но бросает «java.lang.NoSuchMethodError» исключение при вызове из Свиньи:Ошибка Piglatin jodatime с StanfordCoreNLP

Loading default properties from tagger edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger Loading classifier from edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz 2013-06-14 10:47:54,952 [communication thread] INFO org.apache.hadoop.mapred.LocalJobRunner - reduce > reduce done [7.5 sec]. Loading classifier from edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz ... 2013-06-14 10:48:02,108 [Low Memory Detector] INFO org.apache.pig.impl.util.SpillableMemoryManager - first memory handler call - Collection threshold init = 18546688(18112K) used = 358671232(350264K) committed = 366542848(357952K) max = 699072512(682688K) done [5.0 sec]. Loading classifier from edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz ... 2013-06-14 10:48:10,522 [Low Memory Detector] INFO org.apache.pig.impl.util.SpillableMemoryManager - first memory handler call- Usage threshold init = 18546688(18112K) used = 590012928(576184K) committed = 597786624(583776K) max = 699072512(682688K) done [5.6 sec]. 2013-06-14 10:48:11,469 [Thread-11] WARN org.apache.hadoop.mapred.LocalJobRunner - job_local_0001 java.lang.NoSuchMethodError: org.joda.time.Duration.compareTo(Lorg/joda/time/ReadableDuration;)I at edu.stanford.nlp.time.SUTime$Duration.compareTo(SUTime.java:3406) at edu.stanford.nlp.time.SUTime$Duration.max(SUTime.java:3488) at edu.stanford.nlp.time.SUTime$Time.difference(SUTime.java:1308) at edu.stanford.nlp.time.SUTime$Range.(SUTime.java:3793) at edu.stanford.nlp.time.SUTime.(SUTime.java:570)

Вот соответствующий код:

object CountryTokenizer { 
    def tokenize(text: String): String = { 
    val locations = TweetEntityExtractor.NERLocationFilter(text) 
    println(locations) 
    locations.map(x => Cities.country(x)).flatten.mkString(" ") 
    } 
} 

class PigCountryTokenizer extends EvalFunc[String] { 
    override def exec(tuple: Tuple): java.lang.String = { 
    val text: java.lang.String = Util.cast[java.lang.String](tuple.get(0)) 
    CountryTokenizer.tokenize(text) 
    } 
} 

object TweetEntityExtractor { 
    val processor:Processor = new CoreNLPProcessor() 


    def NERLocationFilter(text: String): List[String] = { 
     val doc = processor.mkDocument(text) 

     processor.tagPartsOfSpeech(doc) 
     processor.lemmatize(doc) 
     processor.recognizeNamedEntities(doc) 

     val locations = doc.sentences.map(sentence => { 
      val entities = sentence.entities.map(List.fromArray(_)) match { 
       case Some(l) => l 
       case _ => List() 
      } 
      val words = List.fromArray(sentence.words) 

      (words zip entities).filter(x => { 
       x._1 != "" && x._2 == "LOCATION" 
      }).map(_._1) 
     }) 
     List.fromArray(locations).flatten 
    } 
} 

Я используя sbt-assembly, чтобы построить кувшин с жиром, и поэтому файл joda-time jar должен быть доступен. Что происходит?

ответ

0

Свинья поставляются со своей версией joda-time (1.6), которая несовместима с 2.x.