看起来很简单,我可以用另一种语言轻松地做到这一点,但我正在努力寻找使用 Pig 的答案。我可以每天将一个或多个日志文件转储到一个目录中。我想迭代调用每个文件并将其传递给 Pig 脚本进行处理。我知道参数替换,但如何遍历文件并传递/调用我的 Pig 脚本?谢谢。
最佳答案
你可以直接在 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(',');
罗曼
关于linux - 如何针对目录中的多个文件执行 Pig 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517029/