0
我寫了一個映射工作,這佔用了一堆鳴叫和關鍵字的列表,併發出關鍵字如何在運行時更改map-reduce作業的作業參數?
@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;
}
現在我的關鍵字列表是靜態的/在地圖,減少罐子硬編碼的鳴叫計數文件,我該如何使這種動態?即我希望能夠在運行時更改關鍵字?
這樣做的最好方法是什麼?
閱讀文件的方式如何?地圖作業將在各種服務器上運行,對於不同的服務器,路徑可能會有所不同。 – Dude
@Dude你有HDFS在你的處置,爲什麼從本地磁盤讀取? –
但是,如果我把關鍵字文件放在hdfs中,它會被分割到多臺機器上?我如何在map/reduce job中訪問該文件?你能告訴我一個例子嗎? – Dude