Pig UDF中的分布式缓存

时间:2014-04-03 06:53:05

标签: apache-pig

以下是使用Pig使用分布式缓存实现UDF的代码。

public class Regex extends EvalFunc<Integer> {
    static HashMap<String, String> map = new HashMap<String, String>();

    public List<String> getCacheFiles() {
         Path lookup_file = new Path(
         "hdfs://localhost.localdomain:8020/user/cloudera/top");


        List<String> list = new ArrayList<String>(1);
        list.add(lookup_file + "#id_lookup");
        return list;
    }

    public void VectorizeData() throws IOException {
        FileReader fr = new FileReader("./id_lookup");
        BufferedReader brd = new BufferedReader(fr);
        String line;
        while ((line = brd.readLine()) != null) {
            String str[] = line.split("#");
            map.put(str[0], str[1]);
        }
        fr.close();
    }

    @Override
    public Integer exec(Tuple input) throws IOException {

        // TODO Auto-generated method stub
        return map.size();
    }

}

以下是我的分布式缓存输入文件(hdfs://localhost.localdomain:8020 / user / cloudera / top)

Impetigo|Streptococcus pyogenes#Impetigo
indeterminate leprosy|Uncharacteristic leprosy#indeterminate leprosy

我得到的输出是

(0)
(0)
(0)
(0)
(0)

这意味着我的hashmap为空。 如何使用分布式缓存填充我的hashmap?。

1 个答案:

答案 0 :(得分:0)

这是因为在可执行文件中没有调用VectorizeData()。