在进行MR的过程前,通常需要在setUp读入一些文件,MR中的文件操作与平时项目中FileInputStream是比较类似的,只不过需要使用FSDataInputStream。这里写一个读取一个目录下所有文件的Demo,方便以后回顾。
private static String universityPath = "hdfs://10.1.11.1000:8020/user/mysql/china_universities";
public List<String[]> getUniversityInfo(Mapper<Object, Text, Text, NullWritable>.Context context) throws Exception{
List<String[]> universityInfo = new ArrayList<>();
Configuration configuration=context.getConfiguration();
FileSystem fileSystem=FileSystem.get(URI.create(universityPath), configuration);
Path filePath =new Path(universityPath);
//将areaCode 目录下的所有文件进行读取
FileStatus stats[] = fileSystem.listStatus(filePath);
//数据的读入操作
for(int i = 0; i < stats.length; ++i){
if(stats[i].getPath().toString().indexOf("part")!=-1){//文件只需要读取part-r-00000这种格式的
Path inFile =new Path(stats[i].getPath().toString());
FSDataInputStream in=null;
in=fileSystem.open(inFile);
InputStreamReader isr = new InputStreamReader(in,"utf-8");
BufferedReader br = new BufferedReader(isr);
String line;
//数据处理后放到subjectMap中
while((line = br.readLine()) != null){
String[] areaStrs = line.split("'");
universityInfo.add(areaStrs);
}
}
}
return universityInfo;
}