我正在尝试在Amazon的Elastic Map Reduce上运行我的Pig脚本(使用UDF)。 我需要在UDF中使用一些静态文件。
我在UDF中做了类似的事情:
public class MyUDF extends EvalFunc<DataBag> {
public DataBag exec(Tuple input) {
...
FileReader fr = new FileReader("./myfile.txt");
...
}
public List<String> getCacheFiles() {
List<String> list = new ArrayList<String>(1);
list.add("s3://path/to/myfile.txt#myfile.txt");
return list;
}
}
我已将文件存储在我的s3存储桶/path/to/myfile.txt
中然而,在运行我的Pig工作时,我看到一个例外:
Got an exception java.io.FileNotFoundException: ./myfile.txt (No such file or directory)
所以,我的问题是:在亚马逊的EMR上运行pig脚本时如何使用分布式缓存文件?
编辑:我发现pig-0.6与pig-0.9不同,它没有一个名为getCacheFiles()的函数。亚马逊不支持pig-0.6,所以我需要找出一种不同的方式来获得分布式缓存工作在0.6
答案 0 :(得分:0)
我认为将这个额外的arg添加到Pig命令行调用应该有效(使用s3或s3n,具体取决于文件的存储位置):
–cacheFile s3n://bucket_name/file_name#cache_file_name
你应该可以在&#34; Extra Args&#34;中添加它。创建工作流程时的框。