我试图使用java中的hadoop mapreduce编程计算文件中出现的<b>特定(输入、输出、单词)。但我无法找到一种方法将单词传递给map函数。我尝试了以下方法,但没有成功:-在mapper类中创建了一个静态字符串变量,并将第三个参数(即要搜索的单词)的值分配给它。然后尝试在map函数中使用这个静态变量。但在map函数中,静态变量值为空。我无法在map函数中获得第三个arment的值。
有办法通过JobConf对象设置值吗?请帮帮忙。我在下面粘贴了我的代码。
public class MyWordCount {
public static class MyWordCountMap extends Mapper < Text, Text, Text, LongWritable > {
static String wordToSearch;
private final static LongWritable ONE = new LongWritable(1L);
private Text word = new Text();
public void map(Text key, Text value, Context context)
throws IOException, InterruptedException {
System.out.println(wordToSearch); // Here the value is coming as Null
if (value.toString().compareTo(wordToSearch) == 0) {
context.write(word, ONE);
}
}
}
public static class SumReduce extends Reducer < Text, LongWritable, Text, LongWritable > {
public void reduce(Text key, Iterator < LongWritable > values,
Context context) throws IOException, InterruptedException {
long sum = 0L;
while (values.hasNext()) {
sum += values.next().get();
}
context.write(key, new LongWritable(sum));
}
}
public static void main(String[] rawArgs) throws Exception {
GenericOptionsParser parser = new GenericOptionsParser(rawArgs);
Configuration conf = parser.getConfiguration();
String[] args = parser.getRemainingArgs();
Job job = new Job(conf, "wordcount");
job.setJarByClass(MyWordCountMap.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
job.setMapperClass(MyWordCountMap.class);
job.setReducerClass(SumReduce.class);
job.setInputFormatClass(SequenceFileInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
String MyWord = args[2];
MyWordCountMap.wordToSearch = MyWord;
job.waitForCompletion(true);
}
}
有一种方法可以使用Configuration
(参见此处的api)来做到这一点。例如,可以使用以下代码将“Tree”设置为要搜索的单词:
//Create a new configuration
Configuration conf = new Configuration();
//Set the work to be searched
conf.set("wordToSearch", "Tree");
//create the job
Job job = new Job(conf);
然后,在映射器/化简器类中,您可以使用以下内容获取 wordToSearch
(即本示例中的“树”):
//Create a new configuration
Configuration conf = context.getConfiguration();
//retrieve the wordToSearch variable
String wordToSearch = conf.get("wordToSearch");
有关更多详细信息,请参阅此处。
问题内容: 对于这个新手问题,我感到很抱歉,但是我对编程还是有点陌生(从几天前开始)。基本上我想做的是保留一个文件,并保留另一个文件的所有单词出现 我知道我可以这样做: 事情是,在那之后,我想获取第二个文件,再次计算出现次数并更新第一个文件。之后,我取第三份文件,依此类推。 我在做什么,此刻工作没有任何问题(我使用,和),但它看起来相当缓慢。 我很确定使用,仅使用命令就可以有一种非常有效的方法,但
问题内容: 计算单词在文件中出现的次数的简便方法是什么? 问题答案: 这还将在单行中计算单词的多次出现:
我想读一个文本文件,打印出已知单词前面的单词,比如Java中的xxx。我使用Scanner类用java编写了这段代码。但是这段代码只打印了“xxx”前面的一半单词,而“xxx”前面的一些单词则丢失了。我想知道是什么问题,你能解决这个代码吗。 测试文件包含类似的内容
问题内容: 我有一个具有以下格式的.txt文件, 尽管显然它要大得多,但实际上是这样。基本上,我试图总结每个单独字符串在文件中的次数(每个字母/字符串在单独的一行上,因此从技术上讲文件是C \ nV \ nEH \ n等。但是,当我尝试将这些文件转换为列表,然后使用count函数时,它会分离出字母,以使诸如’IRQ’之类的字符串为[‘\ n’I’,’R’ ,’Q’,’\ n’],这样当我计算它时,
我正在开发一个学生项目,需要编写一个函数来计算单词中的音节。该函数就像长的CountSyllabl(String word)。 如何使用Java计算单词中的音节?有什么建议吗? 提供的规则是: > < li> 要计算音节数,您应该使用字母a、e、I、o、u、y作为元音。 计算单词中的元音数量。 不要计算双元音(例如,“rain”有2个元音,但只有1个音节) 如果单词中的最后一个字母是“e”,不要把
问题内容: 好的,所以我有这个yaml文件,我想替换一个字符串 与字符串 但是我不知道该怎么办。这是完整的Yaml文件 问题答案: 假设您使用的操作系统不错,并且您的YAML文档称为: