如何在spark中向kryo注册internalrow

x7yiwoj4  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(480)

我想用kryo连载来运行spark。所以我决定 spark.serializer=org.apache.spark.serializer.KryoSerializer 以及 spark.kryo.registrationRequired=true 当我运行我的代码时,我得到一个错误:
类未注册:org.apache.spark.sql.catalyst.internalrow[]
根据我的帖子

sc.getConf.registerKryoClasses(Array( classOf[ org.apache.spark.sql.catalyst.InternalRow[_] ] ))

但错误是:
org.apache.spark.sql.catalyst.internalrow不接受类型参数

2w3kk1z5

2w3kk1z51#

您应该使用外部类作为

class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[Array[org.apache.spark.sql.catalyst.InternalRow]])
}
}

资料来源:http://spark.apache.org/docs/0.6.0/tuning.html
或者如果你想注册你的spark班

val cls: Class[Array[InternalRow]] = classOf[Array[org.apache.spark.sql.catalyst.InternalRow]]

spark.sparkContext.getConf.registerKryoClasses(Array(cls))

我用第一个,效果很好,我还没有测试过第二个。

相关问题