복붙노트

[SCALA] Kryo 스파크 : 사용자 정의 시리얼 등록

SCALA

Kryo 스파크 : 사용자 정의 시리얼 등록

나는 클래스가 그 구현 읽기 () 및 쓰기 () com.esotericsoftware.kryo.Serializer에서 방법 (아래 예 참조)을 구현하여 사용자 정의 Kryo 시리얼. 어떻게 불꽃이 정의 시리얼을 등록 할 수 있습니다?

여기에 내가 무엇을의 의사 코드의 예입니다 :

class A() 

CustomASerializer extends com.esotericsoftware.kryo.Serializer[A]{
    override def write(kryo: Kryo, output: Output, a: A): Unit = ???
    override def read(kryo: Kryo, input: Input, t: Class[A]): A = ???
}

val kryo: Kryo = ... 
kryo.register(classOf[A], new CustomASerializer()); // I can register my serializer

이제 불꽃의 :

val sparkConf = new SparkConf()
sparkConf.registerKryoClasses(Array(classOf[A]))

불행하게도, 스파크 나에게 내 사용자 지정 시리얼을 등록 할 수있는 옵션을 제공하지 않습니다. 어떤 생각이 할 수있는 방법이 있다면?

해결법

  1. ==============================

    1.이 사용자 정의 시리얼 등록하여 자신의 KryoRegistrator 만들기 :

    이 사용자 정의 시리얼 등록하여 자신의 KryoRegistrator 만들기 :

    package com.acme
    
    class MyRegistrator extends KryoRegistrator {
      override def registerClasses(kryo: Kryo) {
        kryo.register(classOf[A], new CustomASerializer())
      } 
    }
    

    그런 다음 registrator로 설정 spark.kryo.registrator은 완전한 이름은 예입니다 com.acme.MyRegistrator :

    val conf = new SparkConf()
    conf.set("spark.kryo.registrator", "com.acme.KryoRegistrator")
    
  2. from https://stackoverflow.com/questions/36144618/spark-kryo-register-a-custom-serializer by cc-by-sa and MIT license