linux - 如何针对目录中的多个文件执行 Pig 脚本

标签 linux hadoop gruntjs hive apache-pig

看起来很简单,我可以用另一种语言轻松地做到这一点,但我正在努力寻找使用 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/

相关文章:

c - 根据 K&R,我正在努力可视化指向变量的指针

c - 如何从管道正确读取和写入

linux - 将文本从 Windows 复制并粘贴到远程 Linux 文件

hadoop - 使用SORT时Apache Pig拉丁语法错误

java - 使用分布式缓存的新 api 的问题

javascript - Gruntjs Livereload 正在观看但未更新

node.js - 如何创建 tar 压缩的 npm 模块

javascript - 通过命令行更改 Grunt 配置变量

c - 访问文件

hadoop - 在Hive中的when子句的情况下使用子查询的替代选项