0

こんにちは、私はこのようなデータを持っています:

{"user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": " ACM Press and Addison-Wesley", "authors": [{"name":"null"}], "source": "DBLP"}

{"user_id": "marshallo79", "type": "本", "title": "不等式: 多数派の理論とその応用.", "年": "1979", "出版社": "学術出版", "authors": [{"name":"Albert W. Marshall"},{"name":"Ingram Olkin"}], "source": "DBLP"}

{"user_id": "knuth86a", "type": "Book", "title": "TeX: The Program", "year": "1986", "publisher": "Addison-Wesley", "authors": [{"name":"Donald E. Knuth"}], "source": "DBLP"} ...

そして、発行者、タイトルを取得してからグループにカウントを適用したいのですが、次のスクリプトで「列が必要です...」というエラーが発生しました。

books = load 'data/book-seded-workings-reduced.json'
    using JsonLoader('user_id:chararray,type:chararray,title:chararray,year:chararray,publisher:chararray,authors:{(name:chararray)},source:chararray');

doc = group books by publisher;
res = foreach doc generate group,books.title,count(books.publisher);
DUMP res;    

2番目のクエリでは、次のような構造にしたいと思います:(name,year),title

だから私はこれを試しました:

books = load 'data/book-seded-workings-reduced.json'
    using JsonLoader('user_id:chararray,type:chararray,title:chararray,year:chararray,publisher:chararray,authors:{(name:chararray)},source:chararray');


flat =group books by (generate FLATTEN((authors.name),year);
tab = foreach flat generate group, books.title;
DUMP tab;

しかし、それもうまくいきません...

何かアイデアはありますか?

4

2 に答える 2

1

最初のクエリを試したときに発生するエラーは何ですか? 組み込み関数である COUNT はすべて大文字にする必要があります。COUNT(group) を呼び出すことはできません。group は Pig によって生成される内部識別子です。

最初のクエリを実行すると、次の結果が得られます-

(Academic Press,{(Inequalities: Theory of Majorization and Its Application.)},1) (Addison-Wesley,{(TeX: The Program)},1) (ACM Press および Addison-Wesley,{(Modern Database Systems:オブジェクト モデル、相互運用性、およびその先。)},1)

(名前、年)、タイトルの予想される形式は、この方法でも実現できます-

flat = foreach books generate FLATTEN(authors.name) as authorName, year, title;
tab = group flat by (authorName, year);
finaltab = foreach tab generate group, flat.title;
于 2014-08-26T12:53:35.173 に答える