Hadoop >

map/reduceの周辺

同じ名前を持つことには意味があります。

Pig

※以下は、対話シェルでの実行例。

  1. grunt> cat ./list.txt
  2. 1
  3. 2
  4. 3
  5. grunt> list = load '/user/hadoop/work/list.txt';
  6. grunt> result = foreach list generate $0 * 2;
  7. grunt> dump result;
  8. ...
  9. (2)
  10. (4)
  11. (6)

Hive

※以下は、対話シェルでの実行例。

  1. hive> SELECT * FROM nums;
  2. OK
  3. 1
  4. 2
  5. 3
  6. Time taken: 0.165 seconds
  7. hive> SELECT num * 2 FROM nums;
  8. ...
  9. OK
  10. 2
  11. 4
  12. 6
  13. Time taken: 17.477 seconds

Clojure

※以下は、対話シェルでの実行例。

  • 実行環境は、Clojure 1.1.0
  • map 関数、reduce 関数
    user=> (map (fn [item] (* 2 item)) [1 2 3])
    (2 4 6)
    user=> (map #(* 2 %) [1 2 3])
    (2 4 6)
    user=> (map (partial * 2) [1 2 3])
    (2 4 6)
    
    user=> (reduce (fn [x y] (* x y)) [2 4 6])
    48
    user=> (reduce (fn [x y] (* x y)) 1 [2 4 6])
    48
    user=> (reduce #(* %1 %2) [2 4 6])
    48

Common Lisp

※以下は、対話シェルでの実行例。

  • 実行環境は、Clisp 2.44.1
  • map 関数、reduce 関数
    1. [1]> (map 'list (function (lambda (item) (* 2 item))) (list 1 2 3))
    2. (2 4 6)
    3. [2]> (map 'list #' (lambda (item) (* 2 item)) (list 1 2 3))
    4. (2 4 6)
    5. [3]> (map 'vector #' (lambda (item) (* 2 item)) (vector 1 2 3))
    6. #(2 4 6)
    7.  
    8. [4]> (reduce #' (lambda (x y) (* x y)) (list 2 4 6))
    9. 48
    10. [5]> (reduce #' * (list 2 4 6))
    11. 48
  • mapcar 関数
    1. [1]> (mapcar #' (lambda (item) (* 2 item)) (list 1 2 3))
    2. (2 4 6)

Erlang

※以下は、対話シェルでの実行例。

  • 実行環境は、Erlang 5.6.3
  • map/2 関数、foldl/3 関数
    1> List = [1, 2, 3].
    [1,2,3]
    2> lists:map(fun (Item) -> 2 * Item end, List).
    [2,4,6]
    
    3> List2 = [2, 4, 6].
    [2,4,6]
    4> lists:foldl(fun (X, Y) -> X * Y end, 1, List2).
    48
    5> lists:foldl(fun erlang:'*'/2, 1, List2).
    48
  • リスト内包表記
    1> List = [1, 2, 3].
    [1,2,3]
    2> [2 * Item || Item <- List].
    [2,4,6]

Gauche

※以下は、対話シェルでの実行例。

  • 実行環境は、Gauche 0.8.13
    gosh> (map (lambda (item) (* 2 item)) (list 1 2 3))
    (2 4 6)
    
    gosh> (fold (lambda (x y) (* x y)) 1 (list 2 4 6))
    48
    gosh> (fold * 1 (list 2 4 6))
    48

Groovy

※以下は、対話シェルでの実行例。

  • 実行環境は、Groovy 1.7.0
  • collect メソッド、inject メソッド
    1. groovy:000> [1, 2, 3].collect {item -> item * 2}
    2. ===> [2, 4, 6]
    3. groovy:000> [1, 2, 3].collect() {item -> item * 2}
    4. ===> [2, 4, 6]
    5. groovy:000> [1, 2, 3].collect {it * 2}
    6. ===> [2, 4, 6]
    7.  
    8. groovy:000> [2, 4, 6].inject(1) {x, y -> x * y}
    9. ===> 48

Haskell

※以下は、対話シェルでの実行例。

  • 実行環境は、GHC 6.8.2
  • map 関数、foldl 関数
    1. Prelude> map (\ item -> item * 2) [1, 2, 3]
    2. [2,4,6]
    3. Prelude> map (* 2) [1, 2, 3]
    4. [2,4,6]
    5.  
    6. Prelude> foldl (\ x y -> x * y) 1 [2, 4, 6]
    7. 48
    8. Prelude> foldl (*) 1 [2, 4, 6]
    9. 48
  • リスト内包表記
    1. Prelude> [item * 2 | item <- [1, 2, 3]]
    2. [2,4,6]

JavaScript?

※以下は、対話シェルでの実行例。

  • 実行環境は、Rhino 1.7r2
  • map メソッド
    1. js> [1, 2, 3].map(function (x) {return x * 2;});
    2. 2,4,6
  • 配列内包
    1. js> [item * 2 for each (item in [1, 2, 3])];
    2. 2,4,6

Perl

  • 実行環境は、Perl 5.10.0
    1. @result = map {$_ * 2} (1, 2, 3);
    2.  
    3. $, = ',';
    4. print @result;  #=> 2,4,6
    5.  
    6. use List::Util;
    7. $result = List::Util::reduce {$a * $b} (2, 4, 6);
    8. print $result;  #=> 48

PHP

Python

  • 実行環境は、Python 2.5.2
  • map 関数、reduce 関数
    1. result = map((lambda item: item * 2), [1, 2, 3])
    2. print result    #=> [2, 4, 6]
    3.  
    4. result = reduce((lambda x, y: x * y), result)
    5. print result    #=> 48
  • リスト内包表記
    1. result = [item * 2 for item in [1, 2, 3]]
    2. print result    #=> [2, 4, 6]
  • ジェネレータ: 文字通り生成器なので、遅延評価されます。
    1. result = (item * 2 for item in [1, 2, 3])
    2. print result          #=> <generator object at 0x7ff2a18c>
    3. print list(result)    #=> [2, 4, 6]

Ruby

  • 実行環境は、Ruby 1.8.7
  • map メソッド、reduce メソッド
    1. result = [1, 2, 3].map {|item| item * 2}
    2. p result        #=> [2, 4, 6]
    3.  
    4. p result.reduce {|x, y| x * y}    #=> 48
    5. p result.reduce(:*)              #=> 48
    6.  
    7. sum = [1, 2, 3].reduce(:+)    #=> 6
    8. max = [1, 2, 3].reduce {|x, y| x > y ? x : y}    #=> 3
    9. min = [1, 2, 3].reduce {|x, y| x < y ? x : y}    #=> 1
    10. count = [1, 2, 3].reduce {|x, y| x + 1}    #=> 3

Scala

※以下は、対話シェルでの実行例。

  • 実行環境は、Scala 2.7.7.final
    1. scala> List(1, 2, 3) map {(x) => x * 2}
    2. res0: List[Int] = List(2, 4, 6)
    3. scala> List(1, 2, 3) map (_ * 2)
    4. res1: List[Int] = List(2, 4, 6)
    5.  
    6. scala> List(2, 4, 6) reduceLeft {(x, y) => x * y}
    7. res2: Int = 48
    8. scala> List(2, 4, 6) reduceLeft (_ * _)
    9. res3: Int = 48
    10. scala> (1 /: List(2, 4, 6)) (_ * _)
    11. res4: Int = 48

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-01-12 (火) 23:12:41 (3136d)