在pig脚本中执行shell命令时出错

时间:2012-07-20 21:00:49

标签: apache-pig

我有一个猪脚本,在开头我想生成一个特定日期过去7天的日期字符串(后来用于检索那些日子的日志文件)。 我尝试用这一行做到这一点:     %声明CMD7 input= ; for i in {1..6}; do d=$(date -d "$DATE -i days" "+%Y-%m-%d"); input="\$input\$d,"; done; echo \$input

我收到错误:     “错误2999:意外的内部错误。执行shell命令时出错:输入=;对于{1..6}中的i;执行d = $(date -d”2012-07-10 -i days“”+%Y-% m-%d“); input =”$ input $ d,“; done;。命令退出,退出代码为127”  但是shell命令在猪外面运行得很好。我真的不确定这里出了什么问题。

谢谢!

1 个答案:

答案 0 :(得分:6)

我有一个可行的解决方案,但没有你想要的简化,基本上我没有设法让Pig在声明中执行复杂的shell语句。

我首先编写了一个shell脚本(让我们称之为6-days-back-from.sh):

#!/bin/bash
DATE=$1
for i in {1..6}; do d=$( date -d "$DATE -$i days" +%F ) ; echo -n "$d "; done

然后是一个猪脚本如下(让我们称之为days.pig):

%declare my_date `./6-days-back-from.sh $DATE`
A = LOAD 'dual' USING PigStorage();
B = FOREACH A GENERATE '$my_date';
DUMP B

请注意 dual 是一个包含文本文件的目录,其中包含一行文本,用于显示我们的变量

我打电话给脚本如下:

pig -x local -param DATE="2012-08-03" days.pig

并获得以下输出:

({(2012-08-02),(2012-08-01),(2012-07-31),(2012-07-30),(2012-07-29),(2012-07-28)})