我刚开始使用Pig来分析使用Hadoop的一堆日志文件,我需要根据先前计算的输出加载不同的文件。 例如,如果计算的输出是0x18e0,我需要加载一个名为0x18e0.txt的文件。 如何在LOAD语句中提供参数化文件名?
在python中,执行此操作非常简单:
x = str(var)
File = open( x + '.txt', 'r')
在Pig中有同样简单的方法吗? 我无法在命令行中输入输入,如
pig -param input =
x.txt
因为在运行脚本之前我不知道x的值。
我看到另一种选择,即将输入文件本身指定为此处所述的参数https://wiki.apache.org/pig/ParameterSubstitution,但这似乎过于迂回。还有其他解决办法吗?
答案 0 :(得分:0)
您可以通过以下方式执行此操作:(a)在命令行中执行预处理,或(b)使用declare
并调用bash脚本:
pig -param input =`hdfs dfs -cat file_list.txt | awk' BEGIN {ORS ="&#34 ;;} {if (NR == 1)打印;否则打印"," $ 0;}'`.txt script.pig
方法(b)。创建一个bash脚本,执行获取x:
所需的处理#!/斌/庆典
#HERE你输出的代码是打出十六进制数字
然后一个猪脚本如下:
%声明x`./ my_script.sh`
...
在方法(b)中,您不需要创建Bash脚本,因为您可以使用命令行工具和反引号进行预处理(如图所示)。