के लिए कोई एन्कोडर नहीं मिला है, मैं अपाचे स्पार्क 2.0 का उपयोग कर रहा हूं और DetaSet
के लिए स्कीमा का उल्लेख करने के लिए case class
बना रहा हूं। जब मैं java.time.LocalDate
के लिए, How to store custom objects in Dataset? के अनुसार कस्टम एनकोडर परिभाषित करने के लिए कोशिश कर रहा हूँ मैं निम्न अपवाद है:अपाचे स्पार्क 2.0: java.lang.UnsupportedOperationException: java.time.LocalDate
java.lang.UnsupportedOperationException: No Encoder found for java.time.LocalDate
- field (class: "java.time.LocalDate", name: "callDate")
- root class: "FireService"
at org.apache.spark.sql.catalyst.ScalaReflection$.org$apache$spark$sql$catalyst$ScalaReflection$$serializerFor(ScalaReflection.scala:598)
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$9.apply(ScalaReflection.scala:592)
at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$9.apply(ScalaReflection.scala:583)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:241)
at scala.collection.immutable.List.foreach(List.scala:381)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:241)
............
के बाद कोड के द्वारा होता है:
case class FireService(callNumber: String, callDate: java.time.LocalDate)
implicit val localDateEncoder: org.apache.spark.sql.Encoder[java.time.LocalDate] = org.apache.spark.sql.Encoders.kryo[java.time.LocalDate]
val fireServiceDf = df.map(row => {
val dateFormatter = java.time.format.DateTimeFormatter.ofPattern("MM/dd /yyyy")
FireService(row.getAs[String](0), java.time.LocalDate.parse(row.getAs[String](4), dateFormatter))
})
कैसे हम चिंगारी के लिए तीसरे पक्ष एपीआई एनकोडर परिभाषित कर सकते हैं?
अद्यतन
जब मैं पूरे मामले वर्ग के लिए एनकोडर बनाने के लिए, df.map..
बाइनरी में वस्तु, जैसा कि नीचे के नक्शे:
implicit val fireServiceEncoder: org.apache.spark.sql.Encoder[FireService] = org.apache.spark.sql.Encoders.kryo[FireService]
val fireServiceDf = df.map(row => {
val dateFormatter = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy")
FireService(row.getAs[String](0), java.time.LocalDate.parse(row.getAs[String](4), dateFormatter))
})
fireServiceDf: org.apache.spark.sql.Dataset[FireService] = [value: binary]
मैं FireService के लिए नक्शे की उम्मीद कर रहा हूँ, लेकिन वापसी मानचित्र की बाइनरी ।
अरे @ एलेक्सी मुझे आपकी बात अभी भी मिली है, मुझे सटीक कारण नहीं मिला है, हमें पूर्ण ऑब्जेक्ट फॉर्मेटर क्यों चाहिए? –
मुझे आपका अंक मिला। मैं सवाल भी अद्यतन करता हूं, क्योंकि अब मेरा डेटा बाइनरी में परिवर्तित हो गया है। जब मैं लोकलडेट के बजाय टाइमस्टैम्प का उपयोग कर रहा हूं, तो डेटास्केमा अन्यथा बाइनरी के रूप में फ़ायर सर्विस के रूप में निर्मित होता है। –
कृपया एक अलग प्रश्न के रूप में पूछें। सामान्य रूप से, एक अलग से पूछने के लिए एक प्रश्न संपादित नहीं करें। –