Pig脚本:存储命令不起作用

2024-04-28 09:15:29 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次在StackOverflow上发帖,希望有人能帮忙。我对猪的脚本相当陌生,遇到了一个我无法解决的问题。在

下面是一个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命令之后,我收到的错误是:输出位置验证失败。在

我尝试过很多解决方法,比如删除theResult文件夹和删除theResult的早期内容,但是我使用的命令都没有一个有效。这些原则是:

^{pr2}$

以及

hadoop fs -rm myoutput/theResult

…同时使用shell(hs)和文件系统(fs)命令。我尝试调用另一个函数(shell脚本、python函数等)来清除存储在myoutput/theResult文件夹中的早期结果。我看了所有我能找到的网站,但没有什么是有效的。有什么想法吗??在


Tags: 文件命令脚本文件夹fieldasshellfs
3条回答

谢谢你们的回复。我现在有一个有效的解决方案:

fs -mkdir -p myoutput/theResult
fs -rm -r myoutput/theResult

第一行试图创建一个目录,但是“-p”可以防止错误(如果它已经存在)。然后第二行删除它。不管怎样,都会有一个目录要删除,所以没有错误!在

有几件事你可以试试-

  1. 确保输出控制器是有效路径。在
  2. 删除整个目录,而不仅仅是其中的内容。使用'rmr删除目录并在运行pig脚本之前检查路径是否不存在。在

mapreduce的输出位置是一个目录。所以,你一定是这样试过的

hadoop fs -rmr myoutput/theResult

然后运行猪脚本。它会起作用的。 “rmr”-remove recursive,删除两个文件夹/文件 “rm”-只删除文件

每次,您都需要更改输出路径或删除并使用相同的路径,因为HDFS是worm(一次写入多次读取)模型存储。在

相关问题 更多 >