我对Hadoop环境非常陌生。最近,我运行了一个基本的mapreduce程序。它很容易运行。
现在,我在输入路径目录中有一个包含以下内容的输入文件
fileName1
fileName2
fileName3
...
我需要逐一读取此文件的各行,并在指定的输出目录中创建一个具有这些名称(即fileName1,fileName2等)的新文件。
我写了下面的 map 实现,但没有成功
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
String fileName = value.toString();
String path = outputFilePath + File.separator + fileName;
File newFile = new File(path);
newFile.mkdirs();
newFile.createNewFile();
}
有人可以向我解释我错过了什么吗?
谢谢
最佳答案
我认为您应该开始研究 FileSystem的类,我认为您只能在分布式文件系统中创建文件。这是一个我打开文件进行读取的代码示例,您可能只需要一个FSDataOutputStream。在您的映射器中,您可以从Context类中获取配置。
Configuration conf = job.getConfiguration();
Path inFile = new Path(file);
try {
FileSystem fs;
fs = FileSystem.get(conf);
if (!fs.exists(inFile))
System.out.println("Unable to open settings file: "+file);
FSDataInputStream in = fs.open(inFile);
...
}
关于java - Hadoop Map任务:读取指定输入文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379083/