SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

「Jaql」を使ってMapReduceをより簡単に

Jaql(a query language desired for JSON)の使い方

  • X ポスト
  • このエントリーをはてなブックマークに追加

5. Jaqlを動かしてみる

JaqlのIO

 JaqlのIOは、JSONへのデータ読み込みが基礎となり、「read」と「write」の2つのビルトイン関数が基本です。

 read関数やwrite関数には、引数としてタイプ、場所、オプションなどを示すJSONデータを渡す必要がありますが、これを簡単に行うための関数も用意されています。file関数やhdfs関数がそれです。例えば、ローカルファイルのカレントディレクトリーにある「NameRank.json」を読み込むなら、以下の記述で可能です。

read(file("NameRank.json"))

 jaqlshellで実際に動かしてみると分かりやすいと思います。内側のfile(またはhdfs)関数は、パラメーターを生成しているだけです。

jjaql> file("NameRank.json");
{
"type": "local",
"location": "NameRank.json"
}

jaql> hdfs("NameRank.json");
{
"type": "hdfs",
"location": "NameRank.json"
}

 readを付けると、実際に読み込み、戻り値としてJSONが出力されます(ただし、データ件数が大きい場合は延々表示されますのでやめておいたほうがよいです)。

jjaql> read(file("NameRank.json"));
[
{
"head-count": 78,
"name": "鈴木 健太",
"position": 1
},
{
"head-count": 73,
"name": "佐藤 匠",
   :
   :

 件数が多い場合は、「top」という演算子を使うと件数を減らすことができます(bottomはないようです……)。

jjaql> read(file("NameRank.json")) -> top 10;
[
{
"head-count": 78,
"name": "鈴木 健太",
"position": 1
},
{
"head-count": 73,
"name": "佐藤 匠",
   :
   :

 write関数は、書き込みですから、データを渡す必要があります。例えば、ファイルをローカルからHDFSにコピーしてみます。

jjaql> read(file("NameRank.json")) -> write(hdfs("NameRank.json"));
{
"type": "hdfs",
"location": "NameRank.json"
}

 writeの結果出力はファイルの属性を示すJSONとなっていることが分かります。この値をreadに渡すと、また読み込むことも可能だということが分かります。

変数への代入

 データを読み込んで、何度も使う場合、$変数に入れておくと便利です。

jjaql> $rank = read(file("NameRank.json"));

データを削る

 filterで簡単にデータの抽出ができます。例えば、head-count(今回のデータでは、同姓同名の人が何人いるか、という数字)が、10(人)以上のデータだけを抽出するとしたら、以下のようなコマンドで実行できます。

jjaql> $rank -> filter $.head-count > 10;
・・・結果は割愛

 次のように、途中に改行を入れても構いません。

jjaql> $rank
-> filter $.head-count > 10;
・・・結果は割愛

 この状態だと、コンソールに表示されますが、ファイルに書き出しても構いません。

jaql> $rank
-> filter $.head-count > 10
-> write(hdfs("NameRank10.json"));
{
"type": "hdfs",
"location": "NameRank10.json"
}

次のページ
まとめと期待

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

米持 幸寿(ヨネモチ ユキヒサ)

日本アイ・ビー・エム公認 ソフトウェア・エバンジェリスト。alphaWorks、developerWorks、インキュベーション系製品、アセットなどのテクノロジーの推進をしつつ、テクノロジー戦略、エバンジェリストチームをリードしている。講演や執筆も多数。主な著書に「かんたんサーバーサイドJava」(翔泳社)、「Webサービス完全解説」(翔泳社)がある。developerWorks Japan ブログ 「米持幸寿のブログ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5646 2010/12/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング