加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何将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.我尝试了以下代码,但得到了
????java.io.notserializableexception:scala.collection.convert.wrappers $setWrapper

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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读