gpt4 book ai didi

java - 如何在mapreduce中将文件作为参数传递

转载 作者:可可西里 更新时间:2023-11-01 16:11:11 25 4
gpt4 key购买 nike

我想在文件中搜索特定的单词并显示它的计数。当要搜索的单词是单个单词时,我可以通过在驱动程序中设置配置来完成,如下所示:

驱动类:

Configuration conf = new Configuration();
conf.set("wordtosearch", "fun");

映射器类:

public static class SearchMapper extends
Mapper<LongWritable, Text, Text, IntWritable> {
// Map code goes here.
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();


public void map (LongWritable Key, Text value,Context context )throws IOException,InterruptedException{


Configuration conf = context.getConfiguration();
//retrieve the wordToSearch variable
String wordToSearch = conf.get("wordtosearch");
String txt= value.toString();



if(txt.compareTo(wordToSearch)==0){
word = context.getCurrentValue();
context.getCurrentKey();
word.set(txt);
context.write(word, one);

}

但是当文件中有单词列表时,我不知道如何传递它。一些帖子提到使用分布式缓存,但在这样做时我收到“不推荐使用分布式缓存”错误。新的 api 中是否有任何类似的方法来传递文件?

最佳答案

是的,新的API中也有一个方法。

首先,将文件存储在HDFS中。然后,在 Driver 类中(在 main 方法中),执行以下操作:

Configuration conf = getConf(); 
...
Job job = Job.getInstance(conf); ...
job.addCacheFile(new Path(filename).toUri());

最后,在映射器类中(例如在 setup() 方法中),执行以下操作:

URI[] localPaths = context.getCacheFiles();

如果您只有一个文件,它应该存储在 localPaths[0] 中。

关于java - 如何在mapreduce中将文件作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com