我想将字段转换为 Pig 中的行。
来自 input.txt
1 2 3 4 5 6 7 8 9
字段之间的分隔符是 '\t'。
输出.txt
1 2 3 4 ...但我不能使用 TOKENIZER 因为字段的内容可能是一个句子。请帮我。非常感谢。
我想将字段转换为 Pig 中的行。
来自 input.txt
1 2 3 4 5 6 7 8 9
字段之间的分隔符是 '\t'。
输出.txt
1 2 3 4 ...但我不能使用 TOKENIZER 因为字段的内容可能是一个句子。请帮我。非常感谢。
I think alexeipab's answer is the right direction. Here is a simple example:
> 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)
我在使用 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;
}
显然,这不包括任何错误检查,因为它是一个示例,但它会帮助您了解如何执行此操作。
在您的脚本中,您可以“展平”结果并在需要时将单个值放回单个元组中。
使用 DataFu UDF TransposeTupleToBag ( http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/TransposeTupleToBag.html ) 获取一个包含 tuple 转置字段的包。展平包以获取具有 (key:chararray, value:chararray) 元组的行。从展平输出中选择“值”部分。
看起来您想要旋转该行。有几个解决方案见Pivot table with Apache Pig或Splitting a tuple into multiple tuples in Pig