S-JIS[2017-01-15] 変更履歴
Apache Sparkで使用するEncoderクラスについて。
|
|
Spark2のDatasetでは、(Java標準のシリアライズやKryoを使わず)Encoderを使ってシリアライズ/デシリアライズを行う。
デフォルトでは、IntやLong等のプリミティブ型・String・配列・Productを継承したクラスのEncoderが用意されている。
ScalaのケースクラスはProductを継承しているのでEncoderで扱うことが出来る。
(現状では独自のEncoderを作るのは大変そうなので、データにはケースクラスを使うのが良さそう)
SparkSessionやDatasetでは、Encoderが存在していることを前提としているメソッドがある。
このための暗黙変換メソッドがSQLImplicitsで定義されているので、spark.implicitsのメソッドをインポートしておけば、特に気にせずEncoderを扱うことが出来る。
import spark.implicits._
ほとんどの場合はEncoderは暗黙に取得されるので気にする必要は無いが、Encoderを生成したい場合は以下のようにする。
例 | 説明 |
---|---|
import org.apache.spark.sql.Encoder import spark.implicits._ // case class PersonのEncoder val encoder = implicitly[Encoder[Person]] |
暗黙変換を利用。 |
import org.apache.spark.sql.Encoders val encoder = Encoders.product[Person] |
Encodersオブジェクトを利用。 |