当前位置: 首页 > 知识库问答 >
问题:

如何在火花外壳中注册kryo类

袁博
2023-03-14

SparkConf具有方法寄存器KryoClass

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

但是,它在SparkSession.conf()属性提供的RuntimeConfigurationfacade中不可用/公开

@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时,有一个明确的解决方法:我们可以调用提供给

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]))

当尝试在可用于spark会话对象的SqlConf上设置时,会出现以下异常:

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

错误:值registerKryoClasses不是组织的成员。阿帕奇。火花sql。RuntimeConfig spark。conf.registerKryoClasses(数组(classOf[行]))

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

共有1个答案

龙华翰
2023-03-14

以下不是对[我自己的问题的确切回答——但它似乎是当前具体困境的解决办法

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

在作用域中包含这个隐式似乎是直接在SparkConf上向kryo注册类。

 类似资料:
  • 我想注册一个UDAF类(用Scala或Python编写)并在SparkSQL中使用它。 例如: 模拟代码 然后我可以直接在spark sql中使用udaf,如下所示: Spark仅提供了Spark.udf。registerJavaFunction方法注册UDF类。 有人知道如何注册UDAF吗?

  • 我想,问题出在深度嵌套的内部类上。我在登记上做错什么了吗?

  • 在将Spark 1.6应用程序移植到Spark 2.0.2的过程中,日志中出现了以下投诉: 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/streaming/receiver/receiver[]/类 此操作失败,原因是:java。lang.ClassNotFoundException:org/apache/spark/st

  • 我已经在一个15节点的Hadoop集群上安装了。所有节点都运行和最新版本的Hadoop。Hadoop集群本身是功能性的,例如,YARN可以成功地运行各种MapReduce作业。 我可以使用以下命令在节点上本地运行Spark Shell,而不会出现任何问题:。 你知道为什么我不能用客户端模式在纱线上运行Spark Shell吗?

  • 我正在创建一个火花上下文通过使用- 然后我创建一个RDD- 现在,当我对这些数据执行一些操作时,比如(f/take rdd 3)等,我得到了一个错误- 17/11/28 14:35:00错误提示:组织遇到异常。阿帕奇。火花SparkException:未能在org向Kryo注册类。阿帕奇。火花序列化程序。KryoSerializer。newKryo(KryoSerializer.scala:129

  • 我正在尝试配置序列化程序实例,以便在storm拓扑中使用。 非常感谢