繁体   English   中英

如何在运行时更改map-reduce作业的作业参数?

[英]How to change job parameter of a map-reduce job on run-time?

我写了一个地图工作,它占用了一堆推文和关键字列表,并发出关键字的推文计数

@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文件中是静态/硬编码的,如何使它动态化? 即我希望能够在运行时更改关键字?

做这个的最好方式是什么?

从头到尾的多种方式:查询Web服务,读取文件。

无论如何,您可能都不希望对映射的每个记录都执行此操作。 使用缓存层(例如Guava)来缓存外部数据源并使它无效(例如通过时间或修改)是相当普遍的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM