我想根据文件名从hadoop中存在的文件列表中读取特定文件。如果文件名与我的givenname匹配,我想处理该文件数据。以下是我在map方法中尝试过的方法
public void map(LongWritable key,Text value,Context con) throws IOException, InterruptedException
{
FileSplit fs =(FileSplit) con.getInputSplit();
String filename= fs.getPath().getName();
filename=filename.split("-")[0];
if(filename.equals("aak"))
{
String[] tokens = value.toString().split("\t");
String name=tokens[0];
con.write(new Text("mrs"), new Text("filename"));
}
}
答案 0 :(得分:1)
您需要编写自定义PathFilter实现,然后在驱动程序代码中对FileInputFormat使用setInputPathFilter。请看下面的链接:
https://hadoopi.wordpress.com/2013/07/29/hadoop-filter-input-files-used-for-mapreduce/
答案 1 :(得分:1)
使用PathFilter,如Arani建议的那样(+1为此),或者,
如果您选择输入文件的标准只是以字符串" aak - "开头,那么我认为,通过在主方法中更改输入路径,您可以轻松地按照自己的意愿行事(驱动程序)类),像那样:
取代:
String inputPath = "/your/input/path"; //containing the file /your/input/path/aak-00000
FileInputFormat.setInputPaths(conf, new Path(inputPath));
使用:
String inputPath = "/your/input/path"; //containing the file /your/input/path/aak-00000
FileInputFormat.setInputPaths(conf, new Path(inputPath+"/aak-*"))