fho*_*rta 3 hadoop apache-pig hdfs
我想从我的udf调用中访问一个文件.这是我的脚本:
files = LOAD '$docs_in' USING PigStorage(';') AS (id, stopwords, id2, file);
buzz = FOREACH files GENERATE pigbuzz.Buzz(file, id) as file:bag{(year:chararray, word:chararray, count:long)};
Run Code Online (Sandbox Code Playgroud)
罐子已经注册.该路径对我的hdfs是实际的,文件确实存在.打电话.但似乎没有发现该文件.也许是因为我正在尝试访问hdfs上的文件.
如何从我的UDF java调用中访问hdfs中的文件?
在EvalFunc中,您可以通过以下方式从HDFS获取文件:
FileSystem fs = FileSystem.get(UDFContext.getUDFContext().getJobConf());
in = fs.open(new Path(fileName));
BufferedReader br = new BufferedReader(new InputStreamReader(in));
....
Run Code Online (Sandbox Code Playgroud)
您还可以考虑将文件放入分布式缓存中,在这种情况下,您必须覆盖EvalFunc类中的getCacheFiles().
例如:
@Override
public List<String> getCacheFiles() {
List<String> list = new ArrayList<String>(2);
list.add("/cache/pig/wordlist1.txt#w1");
list.add("/cache/pig/wordlist2.txt#w2");
return list;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以只传递文件的符号链接(w1和w2),以便从每个工作节点的本地文件系统中获取它们:
BufferedReader br = new BufferedReader(new FileReader(fileName));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3650 次 |
| 最近记录: |