在开发使用store命令的pig脚本时,我必须删除每次运行的输出目录,否则脚本将停止并提供:
2012-06-19 19:22:49,680 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 6000: Output Location Validation Failed for: 'hdfs://[server]/user/[user]/foo/bar More info to follow:
Output directory hdfs://[server]/user/[user]/foo/bar already exists
因此,我正在搜索一个in-pig解决方案来自动删除目录,如果在调用时目录不存在,它也不会阻塞。
在pig拉丁语参考中,我找到了shell命令调用器fs。不幸的是,每当出现错误时,pig脚本就会中断。所以我不能用
fs -rmr foo/bar
(一)。e。因为如果目录不存在它就会中断。有那么一会儿我想我可以
fs -test -e foo/bar
这是一个测试,不应该打破或我认为。然而,Pig又解释道 test
在不存在的目录上的返回代码作为失败代码并中断。
有一个pig项目的jira票证解决了我的问题,并建议对store命令使用可选参数overwrite或force\ u write。无论如何,我使用pig0.8.1是出于必要,没有这样的参数。
2条答案
按热度按时间3gtaxfhh1#
最后我在grokbase上找到了解决办法。因为找到解决方案花了太长时间,我将在这里复制并添加到它。
假设您想使用以下语句存储输出
然后,为了删除目录,您可以在脚本的开头调用
否“;”或引用,因为它是shell命令。
我现在无法复制它,但在某个时间点,我收到了一条错误消息(关于丢失的文件),我只能假设rmf干扰了map/reduce。所以我建议将调用放在任何关系声明之前。设置之后,寄存器和默认值应该可以。
例子:
tp5buhyn2#
一旦使用fs命令,有很多方法可以做到这一点。对于一个单独的文件,我在脚本的开头添加了以下内容:
对于目录