Java 如何在运行时更改map reduce作业的作业参数?
我已经写了一个地图工作,它占用了一堆推特和关键字列表,并为关键字发出推特计数Java 如何在运行时更改map reduce作业的作业参数?,java,hadoop,mapreduce,bigdata,Java,Hadoop,Mapreduce,Bigdata,我已经写了一个地图工作,它占用了一堆推特和关键字列表,并为关键字发出推特计数 @Override public void map(Object key, Text value, Context output) throws IOException, InterruptedException { JSONObject tweetObject = null; ArrayList<String> keywords = this.getKeyWords()
@Override
public void map(Object key, Text value, Context output) throws IOException,
InterruptedException {
JSONObject tweetObject = null;
ArrayList<String> keywords = this.getKeyWords();
try {
tweetObject = (JSONObject) parser.parse(value.toString());
} catch (ParseException e) {
e.printStackTrace();
}
if (tweetObject != null) {
String tweetText = (String) tweetObject.get("text");
StringTokenizer st = new StringTokenizer(tweetText);
ArrayList<String> tokens = new ArrayList<String>();
while (st.hasMoreTokens()) {
tokens.add(st.nextToken());
}
for (String keyword : keywords) {
for (String token : tokens) {
token = token.toLowerCase();
if (token.equals(keyword) || token.contains(keyword)) {
output.write(new Text(keyword), one);
break;
}
}
}
}
output.write(new Text("count"), one);
}
ArrayList<String> getKeyWords() {
ArrayList<String> keywords = new ArrayList<String>();
keywords.add("vodka");
keywords.add("tequila");
keywords.add("mojito");
keywords.add("margarita");
return keywords;
}
@覆盖
公共void映射(对象键、文本值、上下文输出)引发IOException,
中断异常{
JSONObject tweetObject=null;
ArrayList关键字=this.getKeyWords();
试一试{
tweetObject=(JSONObject)parser.parse(value.toString());
}捕获(解析异常){
e、 printStackTrace();
}
if(tweetObject!=null){
String tweetText=(String)tweetObject.get(“文本”);
StringTokenizer st=新的StringTokenizer(tweetText);
ArrayList标记=新的ArrayList();
而(st.hasMoreTokens()){
添加(st.nextToken());
}
for(字符串关键字:关键字){
for(字符串标记:标记){
token=token.toLowerCase();
if(token.equals(关键字)| | token.contains(关键字)){
输出.写入(新文本(关键字),一个);
打破
}
}
}
}
输出。写入(新文本(“计数”),一个;
}
ArrayList getKeyWords(){
ArrayList关键字=新建ArrayList();
关键词:添加(“伏特加”);
关键词:添加(“龙舌兰”);
关键词:添加(“莫吉托”);
关键词:添加(“玛格丽塔”);
返回关键字;
}
现在我的关键字列表在map reduce jar文件中是静态/硬编码的,如何使其成为动态的?i、 我希望能够在运行时更改关键字
最好的方法是什么 我有多种方法:查询Web服务、读取文件
在任何情况下,您可能都不希望对映射的每个记录执行此操作。使用缓存层(例如Guava)缓存外部数据源并使其失效(例如通过时间或修改)是很常见的。如何通过读取文件来实现这一点?映射作业将在不同的服务器上运行,不同服务器的路径可能不同。@Dude您可以使用HDFS,为什么要从本地磁盘读取?但是如果我将关键字文件放入HDFS,它将在多台计算机上拆分?如何在map/reduce作业中访问该文件?您能给我举个例子吗?