forked from hammerlab/spark-util
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKryo.scala
43 lines (31 loc) · 1.22 KB
/
Kryo.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package org.hammerlab.spark.confs
import org.apache.spark.serializer.{ KryoRegistrator, KryoSerializer }
import org.hammerlab.kryo.Registrar
import org.hammerlab.spark.SparkConfBase
import scala.reflect.ClassTag
case class UserRegistrar(name: String)
object UserRegistrar {
implicit def fromInstance[T <: KryoRegistrator](t: T): UserRegistrar =
UserRegistrar(t.getClass.getName)
implicit def romClass[T <: KryoRegistrator](cls: Class[T]): UserRegistrar =
UserRegistrar(cls.getName)
implicit def fromClassTag[T <: KryoRegistrator](implicit ct: ClassTag[T]): UserRegistrar =
UserRegistrar(ct.runtimeClass.getName)
}
trait Kryo
extends SparkConfBase
with Registrar {
def registrationRequired: Boolean = true
def referenceTracking: Boolean = false
def registrar(userRegistrar: UserRegistrar): Unit =
sparkConf(
"spark.kryo.registrator" → userRegistrar.name
)
def registrar[T <: KryoRegistrator](implicit ct: ClassTag[T]): Unit =
registrar(UserRegistrar.fromClassTag(ct))
sparkConf(
"spark.serializer" → classOf[KryoSerializer].getName,
"spark.kryo.referenceTracking" → referenceTracking.toString,
"spark.kryo.registrationRequired" → registrationRequired.toString
)
}