Python Pig脚本:存储命令不工作

Python Pig脚本:存储命令不工作,python,shell,hadoop,apache-pig,Python,Shell,Hadoop,Apache Pig,这是我第一次在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 GE

这是我第一次在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命令后,我收到的错误是:输出位置验证失败

我尝试了很多解决方法,比如删除theResult文件夹和删除theResult的早期内容,但我使用的命令都不起作用。这些措施大致如下:

hdfs dfs -rm myoutput/theResult


…同时使用shell(hs)和文件系统(fs)命令。我尝试调用另一个函数(shell脚本、python函数等)来清除存储在myoutput/theResult文件夹中的早期结果。我已经阅读了我能找到的每一个网站,但什么都不起作用。任何想法???

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

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


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

您可以尝试几件事情-

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

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

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

    第一行尝试创建一个目录,但是“-p”可以防止已经存在的错误。然后第二行删除它。无论哪种方式,都会有一个要删除的目录,所以没有错误

    当我们第一次使用Pig时,store的输出很混乱

    store grp into '/output1';
    
    这将在根目录中创建名为“output1”的文件夹。文件夹不应已存在

    您可以在这里提供自己的hdfs路径,如/user/thewhitetulip

    hdfs dfs -ls /output1
    
    输出:

    /output1/_SUCCESS
    /output1/part-r-00000
    
    part-r-00000文件是存储程序的输出

    /output1/_SUCCESS
    /output1/part-r-00000