我已经写了一个Map工作,它占用了一堆推特和关键字列表,并发出推特关键字计数
@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;
}
现在我的关键字列表是静态/硬编码在map reduce jar文件中的,如何使其成为动态的?i、 我想能够改变运行时的关键字?
最好的方法是什么?
1条答案
按热度按时间1qczuiv01#
我从头开始就有多种方法:查询Web服务、读取文件。
在任何情况下,您可能都不希望对Map的每个记录都执行此操作。使用缓存层(例如guava)缓存外部数据源并使其失效(例如通过时间或修改)是相当常见的。