स्पार्क डेटासेट्स रोज के Encoder
के लिए पोजो/प्राइमेटिव्स के लिए स्थानांतरित हो गए हैं। SQL अभिव्यक्ति में कॉलम कन्वर्ट करने के लिए Catalyst
इंजन ExpressionEncoder
का उपयोग करता है। हालांकि हमारे स्वयं के कार्यान्वयन के लिए टेम्पलेट के रूप में उपयोग करने के लिए उपलब्ध Encoder
के अन्य उप-वर्ग नहीं दिखते हैं।स्पार्क 2.X डेटासेट में कस्टम एन्कोडर कैसे बनाएं?
//mapping each row to RDD tuple
df.map(row => {
var id: String = if (!has_id) "" else row.getAs[String]("id")
var label: String = row.getAs[String]("label")
val channels : Int = if (!has_channels) 0 else row.getAs[Int]("channels")
val height : Int = if (!has_height) 0 else row.getAs[Int]("height")
val width : Int = if (!has_width) 0 else row.getAs[Int]("width")
val data : Array[Byte] = row.getAs[Any]("data") match {
case str: String => str.getBytes
case arr: Array[[email protected]] => arr
case _ => {
log.error("Unsupport value type")
null
}
}
(id, label, channels, height, width, data)
}).persist(StorageLevel.DISK_ONLY)
}
हम
की एक संकलक त्रुटि मिलती है:यहाँ कोड का एक उदाहरण स्पार्क 1.x में खुश है कि/DataFrames कि नई सरकार में संकलन नहीं करता है
Error:(56, 11) Unable to find encoder for type stored in a Dataset.
Primitive types (Int, String, etc) and Product types (case classes) are supported
by importing spark.implicits._ Support for serializing other types will be added in future releases.
df.map(row => {
^
तो फिर किसी भी तरह/कहीं
-
के लिए एक साधन होना चाहिए
- परिभाषित/लागू हमारे कस्टम एनकोडर जब
DataFrame
पर एक मानचित्रण प्रदर्शन - लागू
- अन्य कस्टम कोड द्वारा उपयोग के लिए एनकोडर रजिस्टर (जो अब प्रकार की एक डेटासेट है)
मैं कर रहा हूँ कोड की तलाश है जो सफलतापूर्वक इन चरणों को निष्पादित करता है।
संभावित डुप्लिकेट: // stackoverflow .com/प्रश्न/36648128/कैसे करने वाली दुकान कस्टम वस्तुओं में एक-डाटासेट) – Alec