2014-02-04 4 views
0

У меня есть файл с твитов я хочу, чтобы извлечь все твиты с моими фильтрами, однако я получаю сообщение об ошибкеPig UDF не в состоянии фильтровать слова

public class TweetFilter extends FilterFunc { 
    static List<String> filterList; 

    TweetFilter() { 
     filterList.add("sick"); 
     // Many More Filters 
    } 

    public Boolean exec(Tuple input) throws IOException { 
     if (input == null || input.size() == 0) 
      return null; 
     try { 
      String str = (String) input.get(0); 
      if (filterList.contains(str)) { 
       return true; 
      } else { 
       return false; 
      } 

     } catch (Exception e) { 
      throw new IOException("Caught exception processing input row ", e); 
     } 
    } 
} 

B = FILTER A BY UDF.TweetFilter($0); 

Error : could not instantiate 'UDF.TweetFilter' with arguments 'null'

ответ

1

Если это весь код, то ваш filterList будет пустым, что приведет к NullPointerException при звонке filteList.add("sick").

Чтобы решить эту проблему, измените строку

static List<String> filterList; 

в

List<String> filterList = new LinkedList<String>(); 

Кроме того, сделать свой конструктор public.

Could not instantiate обычно является сообщением об ошибке, которое вы получаете, когда что-то не получается при вызове конструктора UDF.

+0

Да, это мой полный код, как я могу устранить это NullPointerException. –

+0

Я отредактировал ответ. – Frederic

+0

Спасибо за ваш быстрый ответ. Когда-либо после ваших предложений, я сталкиваюсь с той же ошибкой. –

0

Вы должны зарегистрировать банку, который содержит ваш фильтр, прежде чем пытаться вызвать его из сценария свинки, если вы еще не сделали этого

Попробуйте добавить:

register myudfs.jar; 

Как explainded в де UDFManual http://wiki.apache.org/pig/UDFManual

Смежные вопросы