2017-01-12 15 views
1

У меня есть несколько файлов с данными.
Например: file01.csv с x lignes in it, file02.csv с y линии в нем.Получите имена и содержимое файлов, а затем слейте их в другой файл с mapreduce

Я хотел бы, чтобы лечить и объединить их с MapReduce, чтобы получить файл с x строки, начинающиеся с file01 затем содержимого строки и y файлы, начинающиеся с file02 затем содержимого строки.

У меня есть два вопроса здесь:

  • Я знаю, как получить строки из файла с MapReduce, установив FileInputFormat.setInputPath(job, new Path(inputFile)); Но я не понимаю, как я могу получить строки каждого файла в папке.
  • Как только у меня есть эти строки в моем картографе, как я могу получить доступ к соответствующему имени файла, чтобы я мог создавать нужные данные?

Благодарим вас за рассмотрение.

Ambre

+0

Проверьте, если это поможет вам - http://stackoverflow.com/questions/17875277/reading-file-as-single-record-in-hadoop – Amit

ответ

0

Вам не нужно карта-свертка в вашей ситуации. Это потому, что вы хотите сохранить порядок строк в файле результатов. В этом случае обработка одного потока будет быстрее.

Просто запустите 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();