gpt4 book ai didi

hadoop - 如何在 Apache Pig 中加载具有参数化名称的文件

转载 作者:可可西里 更新时间:2023-11-01 14:41:12 25 4
gpt4 key购买 nike

我刚开始使用 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但这似乎过于迂回。是否有其他解决方案?

最佳答案

您可以通过:(a) 在命令行中进行预处理,或 (b) 使用 declare 并调用 bash 脚本:

方法 (a):在此示例中,反引号 (`) 之间的任何内容都是预处理,它会生成您要用作文件名的十六进制数:

pig -param input=`hdfs dfs -cat file_list.txt | awk 'BEGIN{ORS="";}{if(NR == 1) print; else print ","$0;}'`.txt script.pig

方法 (b)。创建一个 bash 脚本来执行获取 x 所需的处理:

#!/bin/bash

#HERE YOU PUT CODE THAT PRINTS OUT THE HEX NUMBER

然后一个pig脚本如下:

%declare x `./my_script.sh`

...

在方法 (b) 中,您实际上不需要创建 Bash 脚本,因为您可以使用命令行工具和反引号进行预处理(如图所示)。

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

关于hadoop - 如何在 Apache Pig 中加载具有参数化名称的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24964620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com