我是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}
据我了解,点运算符用于取消对元组或bag的引用。在这里z1是我的元组,我正在尝试通过取消引用来获取字段。因此z1.name应该等于name。请帮助我了解我要去哪里错了?
最佳答案
在您的示例中,z1
是名称作为列的关系。要标识/引用关系列,您需要使用::
。
正确的脚本是
z1 = load 'demo.txt' using PigStorage() as (name:chararray);
z2 = foreach z1 generate TOKENIZE(z1::name,',');