如何对目录中的多个文件执行pig脚本

kzmpq1sx  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(428)

似乎很简单,我可以很容易地用另一种语言,但我很难找到答案使用Pig。我可以有一个或多个日志文件转储到一个目录每天。我想迭代地调用每个文件,并将其传递给pig脚本进行处理。我知道参数替换,但如何循环遍历文件并传递/调用我的pig脚本?谢谢。

uqxowvwt

uqxowvwt1#

我只是在中读取整个目录,不尝试处理单个文件。

a= load '/user/Hadoop/test/' using PigStorage(',');

您将获得与所有csv文件内容的单一关系。

disbfnqx

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;
n7taea2i

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(',');

罗曼

相关问题