scala - 如何在 spark-shell 中注册 kryo 类

标签 scala apache-spark kryo

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 shellsparkSession/sparkContext已经创建。那么非运行时设置如何生效呢?

这里的特别需要是:
sparkConf.registerKryoClasses(Array(classOf[org.apache.spark.sql.Row]))

当试图在 SqlConf 上设置时提供给 spark session 对象我们得到这个异常:
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]))



那么,kryo 序列化程序如何在 spark-shell 中注册? ?

最佳答案

以下不是对 [我自己] 问题的确切答案 - 但它似乎可以作为当前特定困境的解决方法:

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

将这个隐含在范围内似乎直接在 SparkConf 上使用 kryo 注册类。

关于scala - 如何在 spark-shell 中注册 kryo 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55839755/

相关文章:

使用 Kryo 序列化对象时出现 java.lang.StackOverflowError

scala - 按名称调用函数体的隧道隐式参数

java - 使用 Scala Trait 扩展 Java 类

apache-spark - 如何读取HBase导出的序列文件

scala - Apache Flink Kryo 序列化程序 - ClassNotFoundException

java - Kryo:IdentityObjectIntMap.clear() 产生巨大的 CPU 负载

scala - Play 框架 scala 应用程序中的数据库事务 (anorm)

Java Tuple2 使用访问器方法和直接调用变量的区别

python - 无法将 S3 与 Pyspark 连接。错误消息 : Bad Request, S3 扩展请求 ID:my_extend_request_id

apache-spark - kubernetes 上的 Spark-Submit 自定义 jar 失败并显示 : failed to load class