崩壊現実-全てはvirtualに収束する-

この日記について|本棚|ブックマーク|Wiki|ついったー部日記
Twitter用人工無脳http://twitter.com/ha_ma寄付
crochet(凍結中)http://d.hatena.ne.jp/showyou/20000101
twitter bot アンケートhttp://d.hatena.ne.jp/showyou/20091225/1261712029

2011-12-27

Hadoop Advent Calendar 27日目 PigでJOINできない!

Hadoop Advent Calendarの27日目を担当します、showyouです。今日自分Hadoopの1年でも書こうと思いましたが、誰もそんなの読みたいと思わないので軽いTipsでも書きます


自分は業務や趣味でPigとかHive(を少し)とExcelを(大量に)使っています。個人的に今まで触った感じを書いてみます主観に基づくので話半分に聞いてください。

Hive

まずHiveのいい点を書いておきます

  1. SQLっぽい言語で、SQLに慣れてれば割と書きやすい
  2. 実行時にエラーが出ている場所が(Pigと比べて)わかりやすい
  3. partitionで高速化できる
  4. クエリがでかいと途中でこける場合がある
  5. テーブル作るのが面倒。間違ったテーブル定義すると検索できなくてエラーになることもある

Pig

次にHiveに比べるとユーザ数が少なそうですが、PigのHiveと比べた特徴を書いときます

  1. クエリとは違った書き方なので、人によってはクエリより書きやすい
  2. 事前にテーブルを作る必要がない。
  3. カラムの一部がNULLのものをJOINすると強制排除。しかもエラー出して止まったりしない
  4. 実行中にうまくJOINできなくて終了する
  5. エラー場所がわかりにくい

特にPig側の3が結構くせもので値の整合性を取るときになってやっと気づくこともあります


例えば以下のようなpigを使って、JOINをしようとします。

A = LOAD '$input' AS (
a:chararray,
b:chararray,
num:int
);

B = LOAD '$input2' AS (
a:chararray,
b:chararray,
num:int
);

C = JOIN A BY (a,b), B BY (a,b);
C = FOREACH C GENERATE
A::a as a,
A::b as b,
A::num as num_a,
B::num as num_b;

dump C;

データは以下の物を用意します。

     a   1
     a b 2

     a     1
     a b 100

このデータでJOINをすると、

     a   1 1
     a b 2 100

と出てくるのが理想的ですが、

実行してみるとこうなります

> pig --param input=test_null1.txt --param input2=test_null2.txt join.pig
(中略)
2011-12-27 01:30:00,220 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!
2011-12-27 01:30:00,231 [main] INFO org.apache.hadoop.mapreduce.lib.input.FileInputFormat - Total input paths to process : 1
2011-12-27 01:30:00,231 [main] INFO org.apache.pig.backend.hadoop.executionengine.util.MapRedUtil - Total input paths to process : 1
(a,b,2,100)

1行足りない・・

ちなみにこれは対策として、nullになる要素に対して、事前に


(b is null ? "": b) as b


とかやっておくことで回避はできますが・・常にnullが出そうなとこって(特にデータが汚いと)有りうるんで、せめてエラーがを出して落ちるくらいしてほしいです。


この辺はid:a_bicky神がここで*1まとめているので、興味があるかたは見てみてください。


という訳でPigの利用者を遠ざけそうな話なのですが、かと言ってHiveも1つの処理で中間データの使い回しが出来なそうだし、残念な書き方するとMapがすぐに10000超えたりするので、正直どっちもどっち感はあります。かと言ってMap-Reduceも多段は面倒です。Pigで値チェックをする為にUnitTest入れたいとか言ったらそもそもJavaで書けやという話もありました。


ところで話は変わりますが、今ビッグデータと騒がれてるわけですが、最近Excelすごいです。100万行まで使えます。なので70000行のデータフィルタする為にHadoop入れたいと思ってる人はまず最新のExcel入れてピボット使いましょう。

終わり

2011-12-22

StanfordのAI-classを終えました

AI Class Statement of Accomplishment」というメールが来て、Basicクラス合格っぽいメールが来ました。

もともと英語の練習にと自分興味本位で聞いてみたわけですが、印っぽいもの貰えてよかったです。


講義の内容とかどこまで書いていいかわからないんでまだあまり書きませんが、難しくはないけど結構大変でした。みっちり丁寧に教えてくれるって感じです。

TOEIC半分くらいしか取れない自分でも受けられたので、みなさんもどんどん受講しましょう!


https://www.ai-class.com/

2011-12-10

DSIRNLP

昨日帰宅が遅かったのもあって家からustで見てました。途中で寝てたりもしましたが結構面白かったです。

2011-11-27

第16回データマイニング&Web勉強会に参加しました

http://d.hatena.ne.jp/hamadakoichi/20111127/p1

参加してきました!

元々Kafkaに興味があったので聞きにきました。HadoopというよりRabbitQueueとかの一体化したパッケージという感じでした。この辺り少し試してみたいです。


2とか4の話は、業務に結構役立ちそうだと感じました。具体的には言えませんがw


ログ

1.Kafka(@yanaoki)
 大規模リアルタイム処理
 Facebook Insights
 Google Analytics
   UUの計算をリアルタイムで出すのが早い!
 Twitter Web Analytics
   Linkedin
     解析基盤Kafkaを開発
        運用監視
        リアルタイムに検索結果に反映
       
  Q:KafkaやStormはHadoopの上で動いているの?
  A:Hadoopは使っていない

     モデル。Producer, Kafka, Consumerとある。
  Flume, Scribeと違ってフロントからバックエンドに押し出すわけじゃなく、ProducerからKafkaに押し込み、Consumerは自分で取りに行く

    メッセージング設計
    Pub/Subメッセージングモデル    -> 応答性能が本来悪いがKafkaではコンシュマーが持つことでパフォーマンスを持つ

    分散に関する設計
     ・ロードバランサ
   プロデューサ/ブローカー間 パーティションで決める
   ブローカー/コンシュマー間 ZooKeeperが持つ接続情報
  ・コンシュマーグループ機能
   各コンシュマーグループに1つずつデータを投げる
                  実際にデータを用意して流れを説明するのは分かりやすい

     Q:プロデューサからKafkaに対し流すメッセージは冗長化されるのか?→されない
     Hadoopとかの対抗というより、RabbitMQの代わりと思ったほうがよい

     実験 KafkaでPumaみたいのを実験
  Twitterのログからja, enでHBASEにインクリメントする
   HBASEはEC2?いくら掛かるんだろう?
     Hadoopとの連携
  可能

     Q:データはいつまで蓄積されるのか?>expired timeが設定できる


ToDo: HBASEマシン欲しいなぁ。->今回用意したのはsmallx2. smallがっつり回すと3000円くらい。largeだと10000円くらい
自分でHDD5台用意すべきか?


2. データマイニング現場24時(kan_yukiko)
 ALBERTのデータマイニング現場の紹介
       レコメンドエンジンのチューニング、データ分析
  顧客からの分析依頼対応

   独自アルゴリズム作成コンサルティング
   Q:大規模はどのくらい? 現商品80万件 100万件
   ユーザ規模:4-500万人

   広告配信最適化のためのデータマイニング
   試行錯誤の連続

 データマイニングのひらめきを得るには
 1.分析課題に対する理解を深める
 2.分析手法に対する理解
 3.結果に対する理解

 形式を大胆に変える
  1/0データ <-> n/0データ
    非階層型クラスター分析では大きな違いが出ることがある
    大胆に変える
  商品ID→カテゴリ、テイスト、ブランドに分けて共起スコアの高いものを出す
 Color Taste Brand


 ALBERTの分析事例
   購入金額で顧客が買ってるカテゴリを推定
   買いたいタイミングを予測
   どんなカテゴリで商品を買って優良顧客になったか分析する
   推薦すべきカテゴリとそのタイミング
       長期間買わないものと短期間買うものを判別
 
   データマイニングはビジネスになるか?→Yes
       データはあるが分析ができない
   データ量が多すぎる/分析者が居ない/小難しそう
    →顧客分析、商品分析レポート
   分析結果からのアクションが思いつかない
    分析しただけで満足→分析結果の満足
     分析負荷が高い
     →ソリューション提供
      ソーシャル系は多いがソーシャルゲーム系はいない

   どういう時に施策に生かされやすいか
  実際に動く部門と一緒に動くのがいい


3.機械学習を使った英語習熟度の推定@langstat
 英語習熟度の判定の現状と課題
 日本人学習者の英作文のマイニング→習熟度の推定、日本人とネイティブの差の分析

   習熟度の推定ができない
 統一的な基準がない
 統計モデルもない
   学習者コーパス
  学習者が実際に算出したコーパス。習熟度別に言語の変更を見る
   Hylandのメタ談話標識
 分類方法:ランダムフォレスト
 1) 精度が高い
   2) 結果がわかりやすい
    Q:SVMはKernelにRBF使ったか? 使ったほうが性能あがるのでは?
  A:メモリ足りなかった 

   Q: 間違った20%での中でいい情報はあったか? 分野が違うと用法が異なってくる
   Q: 回帰させれば5段階だせるのでは?


4.売上予測のテキストからの分析@stakemura
    大本[Mishene 05]Blogから映画の売上の予測
 [Tumasjan 10],[Bolle 10], [Zhang 10] Twitterからの売上予測
    Q:ドロリッチや花王の不買運動は予測できたのか?
 Appleのレーティングから評価と売上の比較
 →ずっと売れてるタイトルは高い評価
  だが、評価が高いからといって売れ続けるとは限らない。

 評判分析アプローチ
      SentiWordNet converter

 分析方法
  1.教師あり機械学習
  Luceneから始めるのがおすすめ
      BM25でストップワードを検出した
      Naive Bayes vs 最大エントロピー ->後者の方がいい

 Q:テキストマイニングはどのタイミングでかけると効果的だろうか?

2011-11-24

[]新MacBookAir買いました

http://m.aumall.jp/


なんか今日だけ、biddersとかaumallとかでポイント20〜40%付くという話があったので、思い切って13インチの新Air買っちゃいました。20%なんで1万以上ポイント付くのがおいしいですね。


自分が買ったのは13インチですが、11インチのがまだ結構出てるみたいなのでURL貼っときます。79,800円なんで20%だと16000ポイントくらい付きます

http://bidders.jp/item/160419925?l=true


もし買ったら一言メールでもtwitterのDMでもいいのでコメント頂けると嬉しいです(^^

筆者:Showyou http://www3.to/showyou