如何在Apache Pig中加载带参数化名称的文件

时间:2014-07-25 21:17:04

标签: hadoop apache-pig hdfs

我刚开始使用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,但这似乎过于迂回。还有其他解决办法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式执行此操作:(a)在命令行中执行预处理,或(b)使用declare并调用bash脚本:

方法(a):在这个例子中,反引号(`)之间的任何内容都是预处理,它导致你想用作文件名的十六进制数字:

  

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脚本,因为您可以使用命令行工具和反引号进行预处理(如图所示)。

其他StackOverflow答案中也提出了类似的方法。更多详情herehere