[英]Registering complex scala classes with Kryo in spark-shell and Scala jars
[英]Registering Classes with Kryo via SparkSession in Spark 2+
我正在从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
而不是作为一个独立的val。
所以现在我使用以下内容(并从我的代码中删除了任何conf,sc等的痕迹)......
val spark = SparkSession.builder.appName("myApp").getOrCreate()
我的问题 :如果我不直接使用SparkConf
或SparkContext
我在哪里注册Kryo的类?
我在这里看到spark.kryo.classesToRegister
: https : spark.kryo.classesToRegister
我有一个非常广泛的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")
或者是其他东西?
编辑
当我尝试通过spark.conf.set("spark.kryo.classesToRegister", "any,any2,any3")
测试spark-shell中的不同格式时,无论我在字符串中放入any,any2,any3
我都不会收到任何错误消息any,any2,any3
。
我试图使any
每个以下格式
我不知道是否有任何成功注册的东西。
您是否尝试了以下内容,它应该可以工作,因为它实际上是SparkConf
API的一部分,我认为唯一缺少的是您只需将其插入SparkSession
:
private lazy val sparkConf = new SparkConf()
.setAppName("spark_basic_rdd").setMaster("local[*]").registerKryoClasses(...)
private lazy val sparkSession = SparkSession.builder()
.config(sparkConf).getOrCreate()
如果你需要Spark Context,你可以调用: private lazy val sparkContext: SparkContext = sparkSession.sparkContext
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.