2016-04-24 18 views
1

整個文件這是我讀了包含HL7消息,並使用哈皮迭代器遍歷它們(從http://hl7api.sourceforge.net)文件如何使映射過程從HDFS

File file = new File("/home/training/Documents/msgs.txt"); 
InputStream is = new FileInputStream(file); 
is = new BufferedInputStream(is); 

Hl7InputStreamMessageStringIterator iter = new 
    Hl7InputStreamMessageStringIterator(is); 

我想使代碼這完成了地圖功能?顯然我需要防止InputFormat中的拆分作爲一個單值讀取整個文件,並將其更改爲字符串(文件大小爲7KB),因爲如您所知,Hapi只能解析整個消息。

我是新手,所以請耐心等待。

回答

0

你需要實現你自己的FileInputFormat子類:

  1. 它必須覆蓋isSplittable()方法false這意味着映射器的這個數字將等於輸入文件的數量:每每一個映射輸入文件。
  2. 您還需要執行getRecordReader()方法。這正是您需要將上面的邏輯解析到的類。
+0

感謝您的回覆,請你能參考我的樣本和實例代碼 – Zaman

0

由於輸入來自文本文件,因此可以覆蓋fileInputFormat的isSplitable()方法。使用這個,一個映射器將處理整個文件。

public boolean isSplitable(Context context,Path args[0]) { return false; }

0

如果你不想讓你的數據文件拆分或你想要一個單一的映射器將處理整個文件。這樣一個文件將只被一個映射器處理。在這種情況下,擴展map/reduce inputformat並重寫isSplitable()方法並返回「false」,因爲布爾值將幫助您。

對於裁判:(不是基於代碼) https://gist.github.com/sritchie/808035

+0

感謝您對裁判,我添加的代碼存在,但仍同樣的錯誤:(我應該改變在輸入格式相同,我有? – Zaman