我刚刚开始使用pig使用hadoop分析一堆日志文件,我需要根据先前计算的输出加载不同的文件。例如,如果计算的输出是0x18e0,则需要加载一个名为0x18e0.txt的文件。如何在load语句中指定参数化文件名?
在python中,这样做非常简单:
x = str(var)
File = open( x + '.txt', 'r')
有没有一种类似的简单方法可以在pig中实现这一点?我不能像这样在命令行中输入
清管器-参数输入= x.txt
因为在运行脚本之前我不知道x的值。
我看到了另一个将输入文件本身指定为参数的选项,如下所述https://wiki.apache.org/pig/parametersubstitution 但这似乎过于迂回。有别的解决办法吗?
1条答案
按热度按时间q5iwbnjs1#
您可以通过:(a)在命令行中进行预处理,或(b)使用
declare
调用bash脚本:方法(a):在本例中,在反记号(
)之间的任何内容都是预处理,它会产生十六进制数,您希望将其用作文件名: pig-param input=
hdfs dfs-cat file_list.txt | awk'开始{ors=“”;}{如果(nr==1)打印;else打印“,”$0;}'`。txt脚本.pig方法(b)。创建一个bash脚本,执行获取x所需的处理:
!/垃圾箱/垃圾箱
在这里你输入了打印十六进制数的代码
然后一个Pig脚本如下:
%声明x
./my_script.sh
...
在方法(b)中,实际上不需要创建bash脚本,因为可以使用命令行工具和backticks(如图所示)进行预处理。
其他答案中也提出了类似的方法。这里和这里有更多的细节。