我是Pig的新手。数据集为
-1,xyz,bio
-2,abcd,physics
我运行了以下查询,
z1 = load 'demo.txt' using PigStorage() as (name:chararray);
z2 = foreach z1 generate TOKENIZE(z1.name,','); --- gives error "scalar has more than one row in o/p"
z2 = foreach z1 generate TOKENIZE(name,','); -- ran fine
描述z1: z1: {name:chararray}
从我读到的点操作符是用来解引用元组或包。这里z1是我的元组,我试图通过解引用来得到field。所以z1。name应该等于name。请帮助我了解我哪里做错了?
在您的示例中,z1
与name作为列的关系。要识别/引用关系列,您需要使用::
。
正确的脚本应该是
z1 = load 'demo.txt' using PigStorage() as (name:chararray);
z2 = foreach z1 generate TOKENIZE(z1::name,',');
您的数据有三个字段。
id,name,subject
默认情况下,Pig将加载以tab分隔的文件。您还需要定义分隔符。
要么在load语句中定义schema,要么使用索引$0,$1…
z1 = LOAD 'demo.txt' USING PigStorage(',') AS (id: int, name:chararray, subject : chararray);
z2 = FOREACH z1 GENERATE z1.name
以这种方式,您可以使用z1。id, z1.name,z1.subject打印值