皆様,遅くなりましたが明けましておめでとうございます。本年も宜しくお願い申し上げます。今回は前回に引き続き,ユーザシーケンスからコサイン関数の計算に必要な値(図1のa1:b1,a1,およびb1)を取り出す方法を紹介します。おさらいHadoopはデータをクラスタ内のローカルディスクに分散し,そのデータがあるノード上で処理を実行するというデータローカリティを実現しているため,コサイン関数をMapReduceのフレームワークに変換して処理することを紹介しました。その設計方法として,処理結果の形式から逆に考える方法を紹介しました。計算結果から考えた処理フローユーザシーケンスからアクセスユーザ数のカウントまで第二段階の処理フローは次の通りです。ここでもアイテムIDを具体的なアイテム名で示しています。第二段階の処理フロー1では,各ユーザシーケンスからシーケンス内に含まれるアイテムをkey,同一ユーザシーケンス内に含まれていた他アイテムをvalueとするペアのリストを作成します。2では,keyであるアイテムでソートしてReducerに渡しています。3では,keyであるアイテムをアクセスしたユーザ数,およびそのアイテムと同一ユーザシーケンス内に出現したアイテムの両方をアクセスしたユーザ数を算出しています。HDFSには,同一ユーザにアクセスされたアイテムの組み合わせをkey,各アイテムをアクセスしたユーザ数,および両アイテムをアクセスしたユーザ数をvalueとするペアが入ります。この例ではザスーラ,ジュマンジ,両方をアクセスしたユーザ数はそれぞれ3人,2人,2人なので,keyをザスーラとジュマンジ(順序に注意してください⁠)⁠,valueをザスーラをアクセスしたユーザ数,ザスーラとジュマンジをアクセスしたユーザ数,ジュマンジをアクセスしたユーザ数の並びで構成しています(色の違いを参考にしてください⁠)⁠。これらの順序を入れ替えたkeyとvalueのペアも出力します。バトルランナーにアクセスしたユーザは他の映画をアクセスしていないので,コサイン関数を計算できないため,以降の処理で使わないため出力しません。これをMapperおよびReducerで実装します。#ユーザシーケンスをユーザIDとアイテムIDのリストに分割する。#アイテムIDのリストから、アイテムのリストを取り出す。#アイテムのリストから重複しているアイテムを取り除く。#アイテムの個数を取り出す。――アイテムリスト内のアイテムが1個の場合の処理}Mapperは図2内の1に相当します。主な処理はユーザシーケンスからのアイテムリストの作成です。アイテムリストをユーザシーケンスごとに作成し,アイテムリスト内のアイテムの個数により,処理を分岐します。複数のアイテムが存在する場合は,各リスト内のアイテムの組み合わせを出力します。この場合は,アイテムリスト内の任意のアイテムをkey,それ以外のアイテムをリスト化したをvalueとしたペアを出力します。リストはアイテムを``:''でネストして生成します。アイテムリスト内の全てのアイテムのペアを取り出して,そのアイテムペアをkey,ユーザidをvalueとして出力する方法もありますが,アイテムをリスト化した場合に比較してkeyとvalueのペアを大量に生成することになり,ソート処理に時間がかかり,処理全体の効率が悪くなります。#入力したデータをkeyとvalueのペアに分割する。分割するデリミタはMap関数の出力形式に合わせる。#ここでは前出のMapperのkey及びvalueがタブ区切りで出力したので、デリミタをタブにする。#以前のkeyである$key_currentに対する処理を開始する。$key_currentがペアを作るアイテムについて出力する。#比較対象となるkeyを変更する。――Value内のアイテムが1個の場合の処理}#標準入力を読み終えた段階で、まだ出力していないkeyに対し、集約を行い、その結果を出力する。}}Reduceは図2内の3に相当します。主な処理はMapperの出力をマージして,各アイテムをアクセスしたユーザ数,および両アイテムをアクセスしたユーザ数の算出です。「⁠同じkeyに関連付けられた全データ(keyが同じkeyとvalueのペア)は同じReducerに送られる」という特徴を生かし,Reducer側ではkeyのカウントをするだけで,keyとなっているアイテムをアクセスしたユーザ数を取得します。これはReducerの$countの変数に入ります。出力は$key_currentとペアを作るアイテムidについて,$key_currentをアクセスしたユーザ数と,$key_currentおよびアイテムidの両方をアクセスしたユーザ数を出力します。この段階ではペアとなるアイテムidをアクセスしたユーザ数が分からないので,コサイン関数は計算できません(Reducerの数を1に設定し,全てのkeyとvalueのペアを読み込むまで出力しないように設計すれば可能ですが,データサイズが大きければメモリの限界を超えるでしょう⁠)⁠。次の処理で計算できるように,出力は$key_currentとペアを作るアイテムidを入れ替えた結果をも出力します。次回は最後の第三段階の処理を紹介し,協調フィルタリング編のまとめとします。実はこの第二段階の処理で,協調フィルタリングに必要なアイテム間相関の値が得られていることも,そこで紹介します。専門は情報検索,統計的機械学習,マーケティングサイエンス。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。