从hadoop中包含许多文件的目录中读取特定文件

时间:2014-12-30 05:01:56

标签: hadoop mapreduce yarn

我想根据文件名从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"));
            }

        }

2 个答案:

答案 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-*"))