2016-12-08 9 views
5

में एडीटी/सीलबंद विशेषता पदानुक्रम को एन्कोड करें यदि मैं स्पार्क DataSet कॉलम के भीतर एक बीजगणितीय डेटा प्रकार (एडीटी) (यानी एक स्कैला सीलबंद विशेषता पदानुक्रम) को स्टोर करना चाहता हूं, तो सबसे अच्छा एन्कोडिंग रणनीति क्या है?स्पार्क डेटासेट कॉलम

sealed trait Occupation 
case object SoftwareEngineer extends Occupation 
case class Wizard(level: Int) extends Occupation 
case class Other(description: String) extends Occupation 

क्या सबसे अच्छा तरीका है एक निर्माण करने के लिए:

उदाहरण के लिए, अगर मैं एक एडीटी है जहां पत्ती प्रकार विभिन्न प्रकार के डेटा की दुकान

org.apache.spark.sql.DataSet[Occupation] 

उत्तर

4

टी एल; डॉ वहाँ अभी कोई अच्छा समाधान नहीं है, और स्पार्क एसक्यूएल/Dataset कार्यान्वयन दिया गया है, यह संभावना नहीं है कि निकट भविष्य में कोई भी होगा।

आप सामान्य kryo या java एनकोडर

val occupation: Seq[Occupation] = Seq(SoftwareEngineer, Wizard(1), Other("foo")) 
spark.createDataset(occupation)(org.apache.spark.sql.Encoders.kryo[Occupation]) 

उपयोग कर सकते हैं, लेकिन व्यवहार में शायद ही उपयोगी है।

UDT एपीआई यह निजी है और काफी एक बहुत बॉयलरप्लेट कोड (अगर जाँच कर सकते हैं o.a.s.ml.linalg.VectorUDT उदाहरण कार्यान्वयन को देखने के लिए) की आवश्यकता है अब के लिए के रूप में एक और संभव दृष्टिकोण (स्पार्क 1.6, 2.0, 2.1-SNAPSHOT) प्रदान करता है।

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