読者です 読者をやめる 読者になる 読者になる

『初めてのSpark』を読み始めた (4)

変換の例.

基本的な変換

  • map(): 関数を RDD の各要素に適用した新しい RDD を返す
  • filter(): 関数が真になる要素のみを含む RDD を返す
  • distinct(): 重複する要素を取り除く. ネットワーク上ですべてのデータをシャッフルするため, コストのかかる処理であることに注意する
  • flatMap(): 関数を RDD の各要素に適用し, 結果のイテレータ群から成る新しい RDD を返す
$ spark-shell
...
scala> val input = sc.parallelize(List(1, 2, 3, 3, 4, 4))
scala> val mapResult = input.map(x => x * x)
scala> println(mapResult.collect().mkString(", "))
1, 4, 9, 9, 16, 16

scala> val filterResult = input.filter(x => x > 3)
scala> println(filterResult.collect().mkString(", "))
4, 4

scala> val distinctResult = input.distinct()
scala> println(distinctResult.collect().mkString(", "))
4, 1, 2, 3

scala> val lines = sc.parallelize(List("hoge hoge", "fuga", "fuga piyo"))
scala> val flatMapResult = lines.flatMap(line => line.split(" "))
scala> println(flatMapResult.collect().mkString(", "))
hoge, hoge, fuga, fuga, piyo

集合操作(2016/04/16 追記)

  • union(other): それぞれの RDD に含まれる要素からなる RDD を返却する
    • 重複する要素はそのまま含まれる
  • intersection(other): 双方の RDD に含まれる要素からなる RDD を返却する
    • 重複する要素はすべて取り除かれる(片方の RDD 内の重複する要素も取り除かれることに注意する)
    • ネットワーク経由でシャッフルがおこなわれる
  • subtract(other): ソース RDD から other に含まれる要素を取り除く
    • シャッフルがおこなわれる
  • cartesian(other): 双方の RDD の直積を返却する
    • 大規模な RDD に対して実行することは, きわめて大きいコストがかかることに注意する
$ spark-shell
...
scala> val input = sc.parallelize(List(1, 2, 3))
scala> val other = sc.parallelize(List(3, 4, 5))

scala> val unionResult = input.union(other)
scala> println(unionResult.collect().mkString(", "))
1, 2, 3, 3, 4, 5

scala> val intersectionResult = input.intersection(other)
scala> println(intersectionResult.collect().mkString(", "))
3

scala> val subtractResult = input.subtract(other)
scala> println(subtractResult.collect().mkString(", "))
1, 2

scala> val cartesianResult = input.cartesian(other)
scala> println(cartesianResult.collect().mkString(", "))
(1,3), (1,4), (1,5), (2,3), (2,4), (2,5), (3,3), (3,4), (3,5)