gpt4 book ai didi

hadoop - Pig MultiStorage 输出到单个文件

转载 作者:可可西里 更新时间:2023-11-01 16:57:44 24 4
gpt4 key购买 nike

假设我有一些日志,比如

key1 something
key2 something
key3 something

我可以使用 Pig MultiStorage 根据键将记录输出到多个文件夹。但是在 MultiStorage 中有什么方法可以确保每个键输出只包含一个文件,而不是像 multistorage 那样包含多个小文件。

最佳答案

默认情况下,MultiStorage 会将相同的 key 存储在单个文件中,因此您无需执行任何操作。在下面的示例中,不同的输入文件中有 4 个键,在使用 MultiStorage 选项存储键后,它将创建 4 个目录 (key1,key2,key3 and key4) 并将相应的值存储在一个单个文件。在 MultiStorage 选项中,'0' 只不过是 column 0

输入1

key1,aaaa
key2,bbbb
key3,cccc
key2,bbbb
key3,eeee
key3,ffff

输入2

key1,zzzz
key2,xxxx
key4,cccc
key3,yyyy
key4,ffff

输入3:

key1,iiii
key2,jjjj
key3,kkkk
key4,llll

PigScript:

REGISTER '/tmp/piggybank.jar';
A = LOAD 'input*' USING PigStorage(',') AS (f1,f2);
STORE A INTO 'output' USING org.apache.pig.piggybank.storage.MultiStorage('output', '0');

输出$ ls

_SUCCESS    key1        key2        key3        key4

输出 $ cat key1/key1-0,000

key1    aaaa
key1 zzzz
key1 iiii

输出 $ cat key2/key2-0,000

key2    bbbb
key2 bbbb
key2 xxxx
key2 jjjj

输出 $ cat key3/key3-0,000

key3    cccc
key3 eeee
key3 ffff
key3 yyyy
key3 kkkk

输出 $ cat key4/key4-0,000

key4    cccc
key4 ffff
key4 llll

选项 2:
另一种选择是使用 SPLIT 命令将相同的 key 存储在单个文件中。

PigScript:

A = LOAD 'input' USING PigStorage(',') AS (f1,f2);
SPLIT A INTO k1 IF (f1=='key1'), k2 IF (f1=='key2'), k3 IF (f1=='key3');
STORE k1 INTO 'OutputKey1' USING PigStorage();
STORE k2 INTO 'OutputKey2' USING PigStorage();
STORE k3 INTO 'OutputKey3' USING PigStorage();

现在输出目录 OutputKey1,OutputKey2,OutputKey3 将存储相应键值的结果。

关于hadoop - Pig MultiStorage 输出到单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929551/

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