我想在pig中将字段转换成行。从input.txt1 2 3 4 5 6 7 8 9字段之间的delimeter是'\t'。到output.txt1 2 3 4 ... 但我不能使用标记器,因为字段的内容可能是一个句子。请帮帮我。非常感谢。
jogvjijk1#
看起来你想把这一行转过来。有两种解决方案—使用ApachePig查看透视表或在pig中将一个元组拆分为多个元组
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)
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; }
显然,这不包括任何错误检查,因为这是一个样本,但它将帮助您了解如何做到这一点。在脚本中,您可以“展平”结果,并在需要时将单个值放回各个元组中。
1aaf6o9v4#
使用datafu udf transportsetupletobag(http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/transposetupletobag.html)获取包含元组转置字段的包。把袋子弄平,让它排成一排(key:chararray, value:chararray)元组。从展平输出中选择“值”部分。
4条答案
按热度按时间jogvjijk1#
看起来你想把这一行转过来。有两种解决方案—使用ApachePig查看透视表或在pig中将一个元组拆分为多个元组
fafcakar2#
我认为阿列克谢帕布的回答是正确的。下面是一个简单的例子:
holgip5t3#
我在使用pig时遇到了一个非常类似的问题。我最后做的是编写一个udf,它将简单地遍历元组。对于元组中的每个字段,它将使用字段值创建一个新元组,并将其添加到数据包中。这是一个样本。。。
显然,这不包括任何错误检查,因为这是一个样本,但它将帮助您了解如何做到这一点。
在脚本中,您可以“展平”结果,并在需要时将单个值放回各个元组中。
1aaf6o9v4#
使用datafu udf transportsetupletobag(http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/transposetupletobag.html)获取包含元组转置字段的包。把袋子弄平,让它排成一排(key:chararray, value:chararray)元组。从展平输出中选择“值”部分。