hadoop在输入文件夹中选择输入文件

时间:2014-11-09 06:15:40

标签: java hadoop

training_set文件夹中,文件存在,如此

mv_000000
mv_000001
mv_000002
...

索引是可以在movie_title.txt

上找到的电影ID

movie_title.tx文件就像:

1,2003,Dinosaur Planet
2,2004,Isle of Man TT 2004 Review
3,1997,Character   
4,1994,Paula Abdul's Get Up & Dance
5,2004,The Rise and Fall of ECW 
...

第一列是特定电影名称的索引。

我根据netplix奖品竞赛数据集练习hadoop。 我假设我插入了特定的电影标题,如“生病”。 然后转到movie_titles.txt文件并搜索“生病”的moive标题ID。 最后设置输入路径电影标题ID。

例如,如果我将hadoop程序启动为:

hadoop jar ~ [input path] [output path] [moiveA name]

必须设置输入路径training_set/mv_movieAIndex

正如我所说,电影ID的信息存在于movie_title.txt

请给我一点提示来解决这个问题。

1 个答案:

答案 0 :(得分:0)

您的要求似乎与Hadoop完全无关。您只需要针对id命令的第3个参数指定的movieName查找hadoop jar。以下代码段将完成工作:

private static Map<String, Integer> getMovieMappings(String filePath)
        throws IOException {
    Map<String, Integer> movieMap = new HashMap<String, Integer>();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(filePath));
        String line;
        while ((line = br.readLine()) != null) {
            String[] temp = line.split(",");
            movieMap.put(temp[2].trim(), Integer.parseInt(temp[0].trim()));
        }
    } finally {
        if (br != null)   br.close(); 
    }
    return movieMap;
}

现在在驱动程序中,只需获取地图并相应地设置inputPath:

Map<String, Integer> movieMap = getMovieMappings("/pathTo/movie_title.txt");
int movieId = movieMap.get(args[2]);
System.out.println(String.format("mv_%06d", movieId));
FileInputFormat.addInputPath( job, 
                              new Path( "training_set",
                                        String.format("mv_%06d", movieId)));

愿它有所帮助。