如何将scala.collection.Set转换为RDD中可序列化的java.util.Set
发布时间:2020-12-16 18:50:54 所属栏目:安全 来源:网络整理
导读:我有一个 scala.collection.Set scalaSet:设置[Long]. 我怎样才能将它转换为带序列化的java.util.Set.我尝试了以下代码,但得到了 ????java.io.notserializableexception:scala.collection.convert.wrappers $setWrapper import scala.collection.JavaConve
我有一个
scala.collection.Set scalaSet:设置[Long].
我怎样才能将它转换为带序列化的java.util.Set.我尝试了以下代码,但得到了 import scala.collection.JavaConversions._ Class MySerializableClass extends Serializable { // method to implement the Scala to Java operations on the given RDD def rddOps(dummyRDD: RDD[(Long,Set[Long])]) = { val dummyRDDWithJavaSet = dummyRDD.map( { case(key,value) => (key,scalaToJavaSetConverter(value)) } // scala Set to Java Set Converters def scalaToJavaSetConverter(scalaSet: Set[Long]): java.util.Set[Long] = { val javaSet : java.util.Set[Long] = setAsJavaSet(scalaSet) javaSet } } 我已经看到线程notserializable exception when trying to serialize java map converted from scala的答案,但解决方案不适用于序列化 解决方法
scala.collection.JavaConvertions / JavaConverters的序列化问题是这些转换器是使用底层(scala / java)对象的包装器.它们只是一个包装器,因此它可以有效地序列化,它们必须保证底层结构是可序列化的.
在您的情况下,最简单的解决方案是在转换方法中实现结构副本: // scala Set to Java Set Converters def scalaToJavaSetConverter(scalaSet: Set[Long]): java.util.Set[Long] = { val javaSet = new java.util.HashSet[Long]() scalaSet.foreach(entry => javaSet.add(entry)) javaSet } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 在Akka/Scala中使用mapTo和期货
- 在vim/macvim中修改$PATH以便找到正确的ruby二进
- pb11.net + webservice + iis6.0 for win2003ser
- 使用Httpservice和Webservice来和Flex进行通讯
- bash – 使用awk,grep,sed解析大型日志文件(~5gb
- shell – 如果出错则退出tcsh脚本
- angularjs – 显示错误 – “Blink延迟任务以使滚
- 关于webservice遇到的一些问题
- WebService(2)-XML系列之Java和Xml之间相互转换
- angularjs – UI-Router模式更改现有视图
热点阅读