如何在pig中将字段转换为行?

pokxtpni  于 2021-06-24  发布在  Pig
关注(0)|答案(4)|浏览(374)

我想在pig中将字段转换成行。
从input.txt
1 2 3 4 5 6 7 8 9
字段之间的delimeter是'\t'。
到output.txt
1 2 3 4 ... 但我不能使用标记器,因为字段的内容可能是一个句子。请帮帮我。非常感谢。

jogvjijk

jogvjijk1#

看起来你想把这一行转过来。有两种解决方案—使用ApachePig查看透视表或在pig中将一个元组拆分为多个元组

fafcakar

fafcakar2#

我认为阿列克谢帕布的回答是正确的。下面是一个简单的例子:

> A = load 'input.txt';
> dump A
(0,1,2,3,4,5,6,7,8,9)
> B = foreach A generate FLATTEN(TOBAG(*));
> dump B
(0)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
holgip5t

holgip5t3#

我在使用pig时遇到了一个非常类似的问题。我最后做的是编写一个udf,它将简单地遍历元组。对于元组中的每个字段,它将使用字段值创建一个新元组,并将其添加到数据包中。这是一个样本。。。

public DataBag exec(Tuple tuple) throws IOException {
    DataBag db = BagFactory.getInstance().newDefaultBag();
    for(int i = 0; i < tuple.size(); ++i){
        DefaultTuple dt = new DefaultTuple();
        dt.append(tuple.get(i));
        db.add(dt);
    }
    return db;
}

显然,这不包括任何错误检查,因为这是一个样本,但它将帮助您了解如何做到这一点。
在脚本中,您可以“展平”结果,并在需要时将单个值放回各个元组中。

1aaf6o9v

1aaf6o9v4#

使用datafu udf transportsetupletobag(http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/transposetupletobag.html)获取包含元组转置字段的包。把袋子弄平,让它排成一排(key:chararray, value:chararray)元组。从展平输出中选择“值”部分。

相关问题