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

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

RDD(Resilient Distributed Dataset)について.

RDD(Resilient Distributed Dataset)

  • イミュータブルな分散された要素のコレクション
  • 複数パーティションに分割されていて, それぞれに対する演算処理がクラスタの各ノード上で行われる
  • 下記の 2 種類の方法で生成できる
    1. 外部のデータセットをロードする
    2. オブジェクトのコレクションをドライバプログラムから配分する
  • RDD には, 変換とアクションの 2 種類の操作が行える

変換

ある RDD から新しい RDD を構築する. 例えば, filter() など. 変換の操作は既存の RDD を変化させるのではなく, 新しい RDD へのポインタを返す.

$ spark-shell
...
scala> val lines = sc.textFile("/usr/local/Cellar/apache-spark/1.6.1/README.md")
...
scala> val scalaLines = lines.filter(line => line.contains("Scala"))
...

アクション

RDD をもとに結果を計算したり, その結果をドライバプログラムに戻したり, 外部のストレージシステムに保存したりする. 例えば, first() など.

scala> scalaLines.first()
res1: String = high-level APIs in Scala, Java, Python, and R, and an optimized engine that
  • 定義された RDD は, 初めてアクションが使われた時点でその生成処理が行われる
  • RDD は, それに対するアクションが実行されるたびに計算し直される
    • ある RDD を何度もアクションで再利用するのであれば, RDD.persist() で永続化できる