这是我第一次在 StackOverflow 上发帖,我希望有人能提供帮助。我对 Pig 脚本还很陌生,遇到了一个我无法解决的问题。
下面是一个 pig 脚本,当我尝试将结果写入文件时失败了:
register 'myudf.py' using jython as myfuncs;
A = LOAD '$file_nm' USING PigStorage('$delimiter') AS ($fields);
B = FILTER A by ($field_nm) IS NOT NULL;
C = FOREACH B GENERATE ($field_nm) as fld;
D = GROUP C ALL;
E = FOREACH D GENERATE myfuncs.theResult(C.fld);
--DUMP E;
STORE E INTO 'myoutput/theResult';
EXEC;
当我转储到屏幕时,我看到了 E 的结果。但是,我需要将结果暂时存储在一个文件中。在 Store 命令之后,我收到的错误是:Output Location Validation Failed。
我尝试了很多解决方法,例如删除 theResult 文件夹和删除 theResult 的早期内容,但我使用的命令均无效。这些都是沿着:
hdfs dfs -rm myoutput/theResult
和
hadoop fs -rm myoutput/theResult
...同时使用 shell (hs) 和文件系统 (fs) 命令。我试图调用另一个函数(shell 脚本、python 函数等)来清除存储在 myoutput/theResult 文件夹中的早期结果。我已经阅读了我能找到的每个网站,但没有任何效果。有什么想法吗??
最佳答案
mapreduce 的输出位置是一个目录。所以,你一定尝试过这种方式
hadoop fs -rmr myoutput/theResult
然后运行 pig 脚本。它会起作用。 “rmr” - 删除递归,删除文件夹/文件 "rm"- 只是删除,它只删除文件
每次,您都需要更改输出路径或删除并使用相同的路径,因为 HDFS 是蠕虫(一次写入读取多次)模型存储。
关于python - pig 脚本 : STORE command not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374186/