如何在 spark-shell 中注册 kryo 类
How to register kryo classes in the spark-shell
SparkConf
有方法 registerKryoClasses
:
def registerKryoClasses(classes: Array[Class[_]]): SparkConf = { .. }
但是 SparkSession.conf()
属性
提供的 RuntimeConfiguration
门面中没有 available/exposed
@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
时有一个明确的解决方法:我们可以在提供给
的 SparkConf
上调用 set(key,value)
val mysparkConf = SparkConf.set(someKey,someVal)
mysparkConf.registerKryoClasses(Array(classOf[Array[InternalRow]]))
SparkSession.builder.conf(mySparkConf)
还有一个没那么清楚..
conf.registerKryoClasses(Array(classOf[scala.reflect.ClassTag$$anon]))
但是当 运行 Spark shell
时 sparkSession
/sparkContext
已经创建。那么非运行时设置如何生效呢?
这里特别需要的是:
sparkConf.registerKryoClasses(Array(classOf[org.apache.spark.sql.Row]))
当试图在 spark
会话对象可用的 SqlConf
上设置时,我们得到这个异常:
scala> spark.conf.registerKryoClasses(Array(classOf[Row]))
error: value registerKryoClasses is not a member of org.apache.spark.sql.RuntimeConfig
spark.conf.registerKryoClasses(Array(classOf[Row]))
那么如何在 spark-shell
中注册 kryo 序列化程序?
以下不是[我自己的]问题的确切答案 - 但它似乎可以作为当前特定困境的解决方法:
implicit val generalRowEncoder: Encoder[Row] = org.apache.spark.sql.Encoders.kryo[Row]
在范围内有这个 implicit 似乎直接在 SparkConf 上用 kryo 注册 类 .
SparkConf
有方法 registerKryoClasses
:
def registerKryoClasses(classes: Array[Class[_]]): SparkConf = { .. }
但是 SparkSession.conf()
属性
RuntimeConfiguration
门面中没有 available/exposed
@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
时有一个明确的解决方法:我们可以在提供给
SparkConf
上调用 set(key,value)
val mysparkConf = SparkConf.set(someKey,someVal)
mysparkConf.registerKryoClasses(Array(classOf[Array[InternalRow]]))
SparkSession.builder.conf(mySparkConf)
还有一个没那么清楚..
conf.registerKryoClasses(Array(classOf[scala.reflect.ClassTag$$anon]))
但是当 运行 Spark shell
时 sparkSession
/sparkContext
已经创建。那么非运行时设置如何生效呢?
这里特别需要的是:
sparkConf.registerKryoClasses(Array(classOf[org.apache.spark.sql.Row]))
当试图在 spark
会话对象可用的 SqlConf
上设置时,我们得到这个异常:
scala> spark.conf.registerKryoClasses(Array(classOf[Row]))
error: value registerKryoClasses is not a member of org.apache.spark.sql.RuntimeConfig spark.conf.registerKryoClasses(Array(classOf[Row]))
那么如何在 spark-shell
中注册 kryo 序列化程序?
以下不是[我自己的]问题的确切答案 - 但它似乎可以作为当前特定困境的解决方法:
implicit val generalRowEncoder: Encoder[Row] = org.apache.spark.sql.Encoders.kryo[Row]
在范围内有这个 implicit 似乎直接在 SparkConf 上用 kryo 注册 类 .