获取文件名和内容,然后使用mapreduce合并到另一个文件中

iovurdzv  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(330)

我有几个文件里面有数据。
例如: file01.csvx 在里面对齐, file02.csvy 里面的线。
我想处理和合并它们与mapreduce为了得到一个文件与 x 以开头的行 file01 然后是行内容,然后 y 以开头的文件 file02 然后是行内容。
我有两个问题:
我知道如何通过设置 FileInputFormat.setInputPath(job, new Path(inputFile)); 但我不明白如何才能得到文件夹中每个文件的行。
一旦我的Map器中有了这些行,如何访问相应的文件名,以便创建所需的数据?
谢谢你的考虑。
安布雷

piah890a

piah890a1#

在你的情况下你不需要Map缩小。这是因为您希望在结果文件中保留行的顺序。在这种情况下,单线程处理会更快。
只需使用如下代码运行java客户端:

FileSystem fs = FileSystem.get();
OutputStream os = fs.create(outputPath); // stream for result file
PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));

for (String inputFile : inputs) { // reading input files
    InputStream is = fs.open(new Path(inputFile));
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String line;
    while ((line = br.readLine()) != null) {
         pw.println(line);
    }
    br.close();
}

pw.close();

相关问题