Как зарегистрировать классы крио в спарк-оболочке - PullRequest
2 голосов
/ 25 апреля 2019

SparkConf имеет метод registerKryoClasses:

def registerKryoClasses(classes: Array[Class[_]]): SparkConf = { .. }

Однако он не доступен / не доступен на фасаде RuntimeConfiguration, предоставленном атрибутом SparkSession.conf()

@transient lazy val conf: RuntimeConfig = new RuntimeConfig(sessionState.conf)

Вот еще о RuntimeConfiguration:

/**
 * Runtime configuration interface for Spark. To access this, use `SparkSession.conf`.
 *
 * Options set here are automatically propagated to the Hadoop configuration during I/O.
 *
 * @since 2.0.0
 */
@InterfaceStability.Stable
class RuntimeConfig private[sql](sqlConf: SQLConf = new SQLConf) {

Существует четкий обходной путь для этого при создании нашего SparkSession: мы можем вызвать set(key,value) на SparkConf, который предоставляется

val mysparkConf = SparkConf.set(someKey,someVal)
mysparkConf.registerKryoClasses(Array(classOf[Array[InternalRow]]))
SparkSession.builder.conf(mySparkConf)

А потом тот, который не такой ясный ..

conf.registerKryoClasses(Array(classOf[scala.reflect.ClassTag$$anon$1]))

Но при запуске Spark shell sparkSession / sparkContext уже созданы. Итак, как же можно применить настройки не во время выполнения?

Особая потребность здесь:

sparkConf.registerKryoClasses(Array(classOf[org.apache.spark.sql.Row]))

При попытке установить его для SqlConf, доступного для объекта сеанса spark, мы получаем следующее исключение:

scala>   spark.conf.registerKryoClasses(Array(classOf[Row]))

ошибка: значение registerKryoClasses не является членом org.apache.spark.sql.RuntimeConfig spark.conf.registerKryoClasses (Array (classOf [строка]))

Так как же тогда сериализаторы крио регистрироваться в spark-shell?

1 Ответ

1 голос
/ 25 апреля 2019

Следующее является , а не точным ответом на [мой собственный] вопрос - но, похоже, это обходной путь для настоящего конкретного затруднения:

implicit val generalRowEncoder: Encoder[Row] = org.apache.spark.sql.Encoders.kryo[Row]

Наличие этого неявного в области видимости регистрирует классы с kryo непосредственно на SparkConf .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...