DatasetのAPIドキュメントは、
> https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset
にあると書いている。次に進む前にちょっと眺めてみる。
説明書きに書いてあることをまとめておく。
- Dataset とは別にDataFrameというものもある。Datasetのuntyped viewだと書いてあるが、意味はよくわからない
- Datasetの操作には、transformationとactionがある。Streamの中間操作と終端操作みたいなものだと思われる
- Datasetはlazyである。まあ、そうでしょうな。actionが実行されたときに、Sparkのquery optimizerがどのように実行するか決める。RDBみたいに、explainも取れる(マジカ)。
- domain-specific object は、Encoderを必要とする。ここでいうdomain-specific objectは、Dataset[T]型のTの部分のことで、domain-specificっていうところのドメインは、つまりは「業務上の」ぐらいの意味だと思われる。ドメインもいろんなコンテキストで使われる言葉でややこしい。Encoderは、そのTをSparkの内部表現に変換するものことらしい。その内部表現が知りたかったら、schema ってメソッドで取れる。
正直、しんどい。
メソッドの方は、Stream APIや、.NETのLINQのIEnumerable, RubyのEnumerableにあるようなものが並んでいるので安心。
目についたものをメモ
Action
- describe
- カラム名を渡すと、平均や最大、最小などありがちな統計情報をまとめてくれる
Basic Dataset function
- cache, persist
- 永続化してくれる。メモリかディスクかは設定による
- checkpoint
- バージョン付けて一時保存して、あとで指定したバージョンに戻してくれる。
- hint
- 今のデータセットにコメントをつける
Typed transformations
- alias, as
- コピーをつくる
- sample
- ランダムなサンプリングをする