开发者社区 问答 正文

pig用group之后,如何对bag的数据进行排序?? 400 报错

pig用group之后,如何对bag的数据进行排序?? 400 报错

加载的数据是:

(3,aaa,0.0)
(2,aaa,0.0)
(1,aaa,0.0)
(1,bbb,0.12206803207423442)
(3,ccc,0.2027325540540822)
(1,ccc,0.04505167867868493)
(2,new,0.13515503603605478)
(1,new,0.04505167867868493)
(2,home,0.13515503603605478)
(1,home,0.09010335735736986)
(1,hello,0.12206803207423442)
(1,world,0.12206803207423442)

pig语句:

tfidf = load 'tfidf.result' using PigStorage(' ')  as (doc_id, word, value);

对doc_id字段进行group后,得到的关系的每个元组的第二个值是bag类型,请问怎么对这个bag进行排序呢?

我试过一些这样的foreach嵌套,但是会出错:

doc_words = group tfidf by doc_id;
doc_words_sort = foreach doc_words {
    wsrt = order tfidf by tfidf.value desc;
    generate group, wsrt;
};

新手学pig,还请大家多多指教!

展开
收起
爱吃鱼的程序员 2020-06-03 15:45:44 718 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    不能先Order在group。排序只能在最后一步做。你出现这样的现象只是特例。group的时候会打乱顺序、。  B= order tfidf by 排序字段 desc;   你是看什么教程学的Pig######嗯嗯,我实验成功了,太感谢您了! 我看的http://www.codelast.com/?p=4550这里面的博客,也结合看了官网的使用手册学的,以后还要多练习练习~######也可以排序。 order tfidf by tfidf.value desc; 就可以了######这句还是写在foreach嵌套里吗? 刚刚试了,还是出现这个错误: mismatched input 'tfidf' expecting LEFT_PAREN######不写在foreach里面。直接 B= order tfidf by tfidf.value desc;    ######谢谢,可是我希望是对已经group的doc_words排序。另外我刚刚试了先order再group发现一个奇特的结果,就是:如果order是升序的,那group里的bag就是降序的,相反,如果order是降序的,group里的bag就是升序的,请问您知道是为啥么?######推荐看Hadoop权威指南这本书######回复 @yimiwawa : 求QQ######嗯,好,谢谢,我开始看了(^__^)

    2020-06-03 17:27:39 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
问答标签:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等