TOKENIZE关键词查询Pig



我是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打印值

最新更新