gpt4 book ai didi

java - map 中键的类型不匹配:预期的org.apache.hadoop.io.Text,当我使用.txt文件作为输入时,收到的org.apache.hadoop.io.LongWritable

转载 作者:行者123 更新时间:2023-12-02 22:03:56 28 4
gpt4 key购买 nike

我正在使用在Virtual box上使用map reduce来运行简单的单词计数程序,并且已安装Cloudera Cent os,并已安装了所有先决条件。

package training;


import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.fs.Path;


public class WordCount {

public static class Map extends Mapper<LongWritable,Text,Text,IntWritable>{

public void map(LongWritable key, Text value,
Context context)
throws IOException,InterruptedException {

String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);

while (tokenizer.hasMoreTokens()) {
value.set(tokenizer.nextToken());
context.write(value, new IntWritable(1));
}


}

}
public static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable>{

public void reduce(Text key, Iterable<IntWritable> values,
Context context)
throws IOException,InterruptedException {
int sum=0;
// TODO Auto-generated method stub
for(IntWritable x: values)
{
sum+=x.get();
}
context.write(key, new IntWritable(sum));

}

}

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub

Configuration conf= new Configuration();


job.setJarByClass(WordCount.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);




FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));


System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

我将此项目导出为jar文件,并执行以下命令
hadoop jar Map.jar training.Wordcount.class  /<hdfs path of file>/filename.txt  outputfile

但是我在运行时遇到的错误如下
java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable

我不明白我到底想念什么。

我尝试了所有可能的解决方案,但没有成功。

有人可以帮我做详细的步骤吗,我的代码需要做任何更改吗?

最佳答案

我做错了。上面的代码都很好,但是我在执行时的错误是

hadoop jar Map.jar training.Wordcount.class  /<hdfs path of file>/filename.txt  outputfile.txt 

我的Map Reduce结果将显示的输出是目录,而不是文件。

输出目录将包含一些文件,例如r-00001等。当我打开此文件时,得到如下内容
Hadoop  2
The 1
Job 4

上面的文本表示输入文件中存在的内容/单词。

当我说.txt文件时,程序期望文本输入格式,但实际上我正在尝试发送数字。因此,这就是我收到该错误的原因。

因此,我尝试的正确命令如下
hadoop jar Map.jar training.Wordcount.class  /<hdfs path of file>/filename.txt  outputDirectoryofHDFS

关于java - map 中键的类型不匹配:预期的org.apache.hadoop.io.Text,当我使用.txt文件作为输入时,收到的org.apache.hadoop.io.LongWritable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com