似乎很简单,我可以很容易地用另一种语言,但我很难找到答案使用Pig。我可以有一个或多个日志文件转储到一个目录每天。我想迭代地调用每个文件,并将其传递给pig脚本进行处理。我知道参数替换,但如何循环遍历文件并传递/调用我的pig脚本?谢谢。
uqxowvwt1#
我只是在中读取整个目录,不尝试处理单个文件。
a= load '/user/Hadoop/test/' using PigStorage(',');
您将获得与所有csv文件内容的单一关系。
disbfnqx2#
我不确定是否可以直接使用pig来完成,但我通常使用hadoop和awk的组合来完成
hadoop fs -ls /testing/*.data | awk '{print $8}' | xargs -I {} pig -param input={} test.pig
在上面的示例中,假设您必须处理hdfs中testing文件夹下的所有.data文件(如果您想要所有类型,那么只需要一个*),您将创建一个列表,然后只对其中的文件pat部分进行grep,然后使用xargs将其传递到pig文件您的pig文件应该使用input作为参数Pig档案应该有这样的东西
a= load '$input' using PigStorage(','); dump a;
n7taea2i3#
您可以在pig中直接使用通配符:
a= load '/user/hadoop/test/*.csv' using PigStorage(','); dump a;
如果文件存储在本地驱动器上,则需要先将其上载到hdfs,然后再执行以下操作:
hadoop fs -put /localdir/*.csv /user/hadoop/test
如果必须获取pig中的文件列表,可以创建bash来初始化该列表并调用pig命令。例如,如果要使用名为“httpd-.log”的5个最新文件启动pig脚本,请创建一个.sh:
# !/bin/bash set -e HDFS_PATH=/user/hadoop/test FILES=`hadoop fs -ls $HDFS_PATH | grep "httpd" | sort +5 -7 | tail -5 | awk '{ print $8 }'| tr '\n' ','` pig -f <pig_script> -p files=$FILES
在你的Pig剧本里:
a= load '$files' using PigStorage(',');
罗曼
3条答案
按热度按时间uqxowvwt1#
我只是在中读取整个目录,不尝试处理单个文件。
您将获得与所有csv文件内容的单一关系。
disbfnqx2#
我不确定是否可以直接使用pig来完成,但我通常使用hadoop和awk的组合来完成
在上面的示例中,假设您必须处理hdfs中testing文件夹下的所有.data文件(如果您想要所有类型,那么只需要一个*),您将创建一个列表,然后只对其中的文件pat部分进行grep,然后使用xargs将其传递到pig文件您的pig文件应该使用input作为参数
Pig档案应该有这样的东西
n7taea2i3#
您可以在pig中直接使用通配符:
如果文件存储在本地驱动器上,则需要先将其上载到hdfs,然后再执行以下操作:
如果必须获取pig中的文件列表,可以创建bash来初始化该列表并调用pig命令。例如,如果要使用名为“httpd-.log”的5个最新文件启动pig脚本,请创建一个.sh:
在你的Pig剧本里:
罗曼