पर यूडीएफ के लिए Serializable नहीं मैं org.apache.spark.SparkException: Task not serializable
मिलता है जब मैं स्पार्क 1.4.1 पर निम्नलिखित को निष्पादित करने का प्रयास करें:स्पार्क: टास्क DataFrame
import java.sql.{Date, Timestamp}
import java.text.SimpleDateFormat
object ConversionUtils {
val iso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX")
def tsUTC(s: String): Timestamp = new Timestamp(iso8601.parse(s).getTime)
val castTS = udf[Timestamp, String](tsUTC _)
}
val df = frame.withColumn("ts", ConversionUtils.castTS(frame("ts_str")))
df.first
यहाँ, frame
एक DataFrame
कि एक HiveContext
भीतर रहता है। उस डेटा फ्रेम में कोई समस्या नहीं है।
मेरे पास पूर्णांक के लिए समान यूडीएफ हैं और वे बिना किसी समस्या के काम करते हैं। हालांकि, टाइमस्टैम्प वाला एक समस्या का कारण बनता है। documentation के अनुसार, java.sql.TimeStamp
Serializable
लागू करता है, इसलिए यह समस्या नहीं है। SimpleDateFormat
के लिए यह भी सच है जैसा कि here देखा जा सकता है।
इससे मुझे विश्वास होता है कि यह यूडीएफ है जो समस्याएं पैदा कर रहा है। हालांकि, मुझे यकीन नहीं है कि इसे कैसे और कैसे ठीक किया जाए।
का पता लगाने के प्रासंगिक अनुभाग:
Caused by: java.io.NotSerializableException: ...
Serialization stack:
- object not serializable (class: ..., value: [email protected])
- field (class: ...$ConversionUtils$$anonfun$3, name: $outer, type: class ...$ConversionUtils$)
- object (class ...$ConversionUtils$$anonfun$3, <function1>)
- field (class: org.apache.spark.sql.catalyst.expressions.ScalaUdf$$anonfun$2, name: func$2, type: interface scala.Function1)
- object (class org.apache.spark.sql.catalyst.expressions.ScalaUdf$$anonfun$2, <function1>)
- field (class: org.apache.spark.sql.catalyst.expressions.ScalaUdf, name: f, type: interface scala.Function1)
- object (class org.apache.spark.sql.catalyst.expressions.ScalaUdf, scalaUDF(ts_str#2683))
- field (class: org.apache.spark.sql.catalyst.expressions.Alias, name: child, type: class org.apache.spark.sql.catalyst.expressions.Expression)
- object (class org.apache.spark.sql.catalyst.expressions.Alias, scalaUDF(ts_str#2683) AS ts#7146)
- element of array (index: 35)
- array (class [Ljava.lang.Object;, size 36)
- field (class: scala.collection.mutable.ArrayBuffer, name: array, type: class [Ljava.lang.Object;)
- object (class scala.collection.mutable.ArrayBuffer,
यार, मैं अब इतना बेवकूफ लग रहा है ... धन्यवाद! – Ian
जब आप मेरा उत्तर स्वीकार करते हैं तो यह आपको बेहतर महसूस करेगा ';-) ' –
यह महत्वपूर्ण नहीं है, लेकिन इससे मुझे इस प्रश्न को देखने और उत्तर पर यहां पोस्ट करने के लिए बेहतर महसूस हुआ। उप-वोट, धन्यवाद! –