2016-04-13 3 views
0

Я пытаюсь создать MapReduce в Hadoop и хочу преобразовать String в IntWritable для него. Я следую приведенным здесь советам: How to convert String object to IntWritable Object in Hadoop. Он советует использоватьHadoop - конструктор IntWritable (int) не загружен

new IntWriteable(Integer.parseInt(someString)) 

так, что я пытаюсь это

public class MyMapper extends Mapper<LongWritable, Text, Text, IntWritable > { 
private final Text wordKey = new Text(""); 

public void map(LongWritable ikey, Text value, Context context) throws IOException, InterruptedException { 
    String[] friend = value.toString().split(";"); 
    String[] friendswith = friend[1].split(","); 
    for (String s : friendswith) { 
     wordKey.set(friend[0]); 
     context.write(wordKey, IntWritable(Integer.parseInt(s))); //trying to convert here 
     } 
    } 
} 

но получаю ошибку

The method IntWritable(int) is undefined for the type MyMapper 

Согласно документации here он отмечает, что есть застройщик, который принимает вход int. У меня есть IntWritable импортирован:

import org.apache.hadoop.io.IntWritable; 

Что может привести к том, что я не могу использовать IntWritable(int) конструктор?

+0

Вы пропускаете 'new' ключевое слово между' context.write (wordKey' и 'IntWritable (Integer.parseInt (s)))' – user3122114

ответ

1

Yout отсутствует ключевое слово new.

В строке

context.write(wordKey, IntWritable(Integer.parseInt(s))); 

вы не создаете экземпляр IntWritable, а вы пытаетесь вызвать метод с именем IntWritable, который не определен.

Попробуйте это:

context.write(wordKey, new IntWritable(Integer.parseInt(s))); 
+0

О. Правильно. Спасибо! :) –