以下是使用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?。
答案 0 :(得分:0)
这是因为在可执行文件中没有调用VectorizeData()。