Java API 讀取HDFS的單檔案

weixin_34088583發表於2017-05-27

HDFS上的單檔案:

-bash-3.2$ hadoop fs -ls /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_category
Found 1 items
-rw-r--r--   2 deploy supergroup        520 2014-08-14 17:03 /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_category/repeatRecCategory.txt
檔案內容:

-bash-3.2$ hadoop fs -cat /user/pms/ouyangyewei/data/input/combineorder/repeat_rec_category/repeatRecCategory.txt | more
8104
960985
5472
971917
5320
971895
971902
971922
958261
972047
972050

Java API使用FileSystem方式 讀取HDFS單檔案的方法

/**
 * 獲取可反覆推薦的類目。以英文逗號分隔
 * @param filePath
 * @param conf
 * @return
 */
public String getRepeatRecCategoryStr(String filePath) {
	final String DELIMITER = "\t";
	final String INNER_DELIMITER = ",";
	
	String categoryFilterStrs = new String();
	BufferedReader br = null;
	try {
		FileSystem fs = FileSystem.get(new Configuration());
		FSDataInputStream inputStream = fs.open(new Path(filePath));
		br = new BufferedReader(new InputStreamReader(inputStream));
		
		String line = null;
		while (null != (line = br.readLine())) {
			String[] strs = line.split(DELIMITER);
			categoryFilterStrs += (strs[0] + INNER_DELIMITER);
		}
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		if (null != br) {
			try {
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	return categoryFilterStrs;
}

相關文章