如何在ApachePig中加载具有参数化名称的文件

ao218c7q  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(293)

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

q5iwbnjs

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(如图所示)进行预处理。
其他答案中也提出了类似的方法。这里和这里有更多的细节。

相关问题