gpt4 book ai didi

apache-pig - 如何使用 PIG 加载文件夹中的每个文件?

转载 作者:行者123 更新时间:2023-12-04 14:05:03 29 4
gpt4 key购买 nike

我有一个每天创建的文件文件夹,所有文件都存储相同类型的信息。我想制作一个脚本,加载最新的 10 个,将它们联合起来,然后在它们上运行一些其他代码。由于 pig 已经有一个 ls 方法,我想知道是否有一种简单的方法可以让我获取最后 10 个创建的文件,并使用相同的加载器和选项以通用名称加载它们。我猜它看起来像:

REGISTER /usr/local/lib/hadoop/hadoop-lzo-0.4.13.jar;
REGISTER /usr/local/lib/hadoop/elephant-bird-2.0.5.jar;
FOREACH file in some_path:
file = LOAD 'file'
USING com.twitter.elephantbird.pig.load.LzoTokenizedLoader('\\t')
AS (i1, i2, i3);

最佳答案

这不是我开箱即用的,而是可以在脚本之外使用某种包装脚本或帮助脚​​本(bash、perl 等)完成的。如果你写了一个脚本,叫做last10.sh ,这将输出您的最后 10 个文件,逗号分隔:

$ ./last10.sh
/input/file38,/input/file39,...,/input/file48

对于最近的 10 个文件,这样的事情应该可以解决问题:
hadoop fs -ls /input/ | sort -k6,7 | tail -n10 | awk '{print $8}' | tr '\n' ','

你可以这样做:
$ pig -p files="`last10.sh`" my_mr.pig

然后,在您的 pig 脚本中,执行以下操作:
data = LOAD '$files'
USING com.twitter.elephantbird.pig.load.LzoTokenizedLoader('\\t')
AS (i1, i2, i3);

如果像这样以逗号分隔,Pig 会加载单独的文件。这相当于做:
data = LOAD '/input/file38,/input/file39,...,/input/file48'
USING com.twitter.elephantbird.pig.load.LzoTokenizedLoader('\\t')
AS (i1, i2, i3);

关于apache-pig - 如何使用 PIG 加载文件夹中的每个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340250/

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