2014-07-19 7 views
6

के भीतर serializable के साथ कैसे परिवर्तित करें मेरे पास scala.collection.Set scalaSet : Set[Long] है।scala.collection.Set से java.util.Set को आरडीडी

मैं इसे 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 देखा है मिल गया है, लेकिन समाधान क्रमबद्धता के साथ काम नहीं किया

उत्तर

4

scala.collection.JavaConvertions/JavaConverters साथ क्रमबद्धता मुद्दा यह है कि इन कन्वर्टर्स है रैपर हैं जो अंतर्निहित (स्कैला/जावा) ऑब्जेक्ट का उपयोग करते हैं। वे केवल एक आवरण हैं और इसलिए प्रभावी रूप से क्रमिक करने योग्य होने के लिए, उनके पास वारंटी होना चाहिए कि अंतर्निहित संरचना क्रमिक है।

// 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 
} 
+3

या सिर्फ नकल निर्माता का उपयोग करें::

आपके मामले में सबसे आसान समाधान अपने रूपांतरण विधि में एक संरचनात्मक प्रतिलिपि लागू करने के लिए है 'नई java.util.HashSet (scalaSet)' – thSoft

संबंधित मुद्दे