我在Scala2.11.1和Hzaelcast 3.5中使用kryo进行序列化。我试图将数据放在hazelcast映射中,但我得到了KryoException
@SerialVersionUID(1)
case class User( id : Int ,name : String, userType : UserType /*UserType is Enum (EMPLOYED , UNEMPLOYED)*/ , userhistory : UserHistory) extends Serializable{
def this()= {
this(0,"",Active, null)
}
}
@SerialVersionUID(1)
case class UserHistory( date : DateTime = DateTime.now(), artworkStatus : ArtworkStatus = ACTIVE) extends Serializable{
def this()={
this(DateTime.parse("0"),ACTIVE)
}
}
下面是我的用户类序列化程序
class UserSerializer extends StreamSerializer[User] {
val log = LoggerFactory.getLogger(this.getClass)
override def destroy() {
}
override def getTypeId() : Int ={
val value : Int = 1;
value
}
// takes the bytes and converts into User Object
@throws(classOf[IOException])
override def read(in : ObjectDataInput) : User = {
val kryo = new Kryo
val input = new Input(in.asInstanceOf[InputStream])
log.info("********** Reading the bytes and converting into User object")
kryo.readClassAndObject(input).asInstanceOf[User]
}
// takes User Object and converts into bytes
@throws(classOf[IOException])
override def write(out : ObjectDataOutput, obj : User) {
val kryo= new Kryo
val bops = new ByteArrayOutputStream
val output = new Output(bops)
kryo.writeClassAndObject(output , obj)
output.flush
output.close
bops.writeTo(out.asInstanceOf[OutputStream])
log.info("********** User object writen into bytes successfully")
}
}
现在,当我将用户类对象从Hcast客户端放入相应的映射中时,如下所示
map.set(user.id , user)
它给了我这些例外:
Cannot invoke the action, eventually got an error: com.hazelcast.nio.serialization.HazelcastSerializationException: com.esotericsoftware.kryo.KryoException: Class cannot be created (non-static member class): scala.Enumeration$Val
以下是HCAST Server
中的StackTraces
请帮帮我!!
通常对于Scala,您应该使用StdinStantiatorStrategy
,例如。
val kryo = new Kryo
val is = new org.objenesis.strategy.StdInstantiatorStrategy
kryo.setInstantiatorStrategy(instantiatorStrategy)
不确定这是否会解决你的问题,但我没有看到任何这样的问题。
下面的行不编译,因为编译没有找到“hashmap$hashtriemap” 40) 最后,我的示例如下所示: 注我没有使用Kryo特定的Akka特性,我使用它作为一个通用的序列化框架。火花也一样。没有直接插入火花或akka配置。
我看到了很多关于Kryo是否可以用来替换RMI所使用的默认JVM序列化的问题,但没有关于如何实际设置它的问题。我听说Kryo是JVM序列化的“插入式”替换,不确定这是否意味着您可以从运行时类路径中交换一些JAR(就像SLF4J绑定等的情况一样),或者其他东西。 所以我要问:如何使用Kryo而不是Java附带的默认JVM序列化来获得RMI?提前道谢!
我正在尝试运行一个用scala编写的mapreduce程序。我已经在类路径中包含了scala库。运行程序时,我的程序抛出以下错误。 $hadoop jar~/HadoopScala。jar com。学习火花字数/输入/字数输入。csv/output-libjars ~/lib/org。scala-lang.scala-library\u 2.12.2。v20170412-161608-VFINAL
从SBT到Scala-IDE的路径在很多地方都有很好的描述: 从SBT项目开始 添加SBT插件定义:addSbtPlugin(“com.typesafe.sbteclipse”%“sbteclipse-plugin”%“2.1.0-rc1”) 从SBT内运行'eclipse'命令 使用已安装的Scala-IDE加载项打开Eclipse 导入项目 什么是反向的?如果我在Scala-IDE中启动了一个
本文向大家介绍Kryo框架使用方法代码示例,包括了Kryo框架使用方法代码示例的使用技巧和注意事项,需要的朋友参考一下 Kryo框架的source已移至https://github.com/EsotericSoftware/kryo ,进入此页面,然后点击右边的Download Zip按钮,就能下载到最新版本的Kryo框架。 导入Eclipse时,记得JDK/JRE选用 JDK1.7版本