Я перехожу с Spark 1.6 на 2.3.
Мне нужно зарегистрировать пользовательские классы в Kryo.Итак, что я вижу здесь: https://spark.apache.org/docs/2.3.1/tuning.html#data-serialization
val conf = new SparkConf().setMaster(...).setAppName(...)
conf.registerKryoClasses(Array(classOf[MyClass1], classOf[MyClass2]))
val sc = new SparkContext(conf)
Проблема в том, что ... везде в инструкциях Spark 2+ это указывает на то, что SparkSession
- это путь для всего ... и есливам нужно SparkContext
это должно быть через spark.sparkContext
, а не как отдельное значение.
Так что теперь я использую следующее (и стер любые следы conf, sc и т. д. из моего кода)...
val spark = SparkSession.builder.appName("myApp").getOrCreate()
Мой вопрос : где я могу зарегистрировать классы в Kryo, если я не использую SparkConf
или SparkContext
напрямую?
Iсм. spark.kryo.classesToRegister
здесь: https://spark.apache.org/docs/2.3.1/configuration.html#compression-and-serialization
У меня достаточно обширный conf.json
для установки spark-defaults.conf
, но я хочу сделать его обобщенным для всех приложений, поэтому я не хочу регистрировать классы здесь.
Когда я смотрю здесь: https://spark.apache.org/docs/2.3.1/api/scala/index.html#org.apache.spark.sql.SparkSession
Это заставляет меня думать, что я могу сделать что-то вроде следующего, чтобы увеличить мой spark-defaults.conf
:
val spark =
SparkSession
.builder
.appName("myApp")
.config("spark.kryo.classesToRegister", "???")
.getOrCreate()
Но что такое???
если я хочу зарегистрироваться org.myorg.myapp.{MyClass1, MyClass2, MyClass3}
?Я не могу найти пример такого использования.
Будет ли это:
.config("spark.kryo.classesToRegister", "MyClass1,MyClass2,MyClass3")
или
.config("spark.kryo.classesToRegister", "class org.myorg.mapp.MyClass1,class org.myorg.mapp.MyClass2,class org.myorg.mapp.MyClass3")
или что-то еще?
EDIT
, когда я пытаюсь протестировать различные форматы в spark-shell через spark.conf.set("spark.kryo.classesToRegister", "any,any2,any3")
, я никогда не получаю никаких сообщений об ошибках, независимо от того, что я помещаю в строку any,any2,any3
.
Я пытался создать any
каждый из следующих форматов
- "org.myorg.myapp.myclass"
- "myclass"
- "class org.myorg.myapp.myclass"
Я не могу сказать, успешно ли что-либо из них зарегистрировано.