S-JIS[2017-01-15] 変更履歴

Encoder

Apache Sparkで使用するEncoderクラスについて。


概要

Spark2のDatasetでは、(Java標準のシリアライズKryoを使わず)Encoderを使ってシリアライズ/デシリアライズを行う。

デフォルトでは、IntやLong等のプリミティブ型String配列Productを継承したクラスのEncoderが用意されている。
ScalaのケースクラスはProductを継承しているのでEncoderで扱うことが出来る。
(現状では独自のEncoderを作るのは大変そうなので、データにはケースクラスを使うのが良さそう)


SparkSessionDatasetでは、Encoderが存在していることを前提としているメソッドがある。
このための暗黙変換メソッドがSQLImplicitsで定義されているので、spark.implicitsのメソッドをインポートしておけば、特に気にせずEncoderを扱うことが出来る。

import spark.implicits._

Encoderの生成

ほとんどの場合は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オブジェクトを利用。

Spark目次へ戻る / Scalaへ戻る / 技術メモへ戻る
メールの送信先:ひしだま