2
Iは、オブジェクトの下に同様に定義された2つの機能(それらの1部分である)を有する:スカラがなぜFunctionをシリアル化できるのですが、PartialFunctionをシリアル化できないのですか?
:それらは両方ともオプション(明確にシリアライズ)に包まれており、シリアライズは/デシリアライズ、そのうちの一つが故障しているval partialFn: scala.PartialFunction[String, Int] =
new AbstractPartialFunction[String, Int] {
override def isDefinedAt(v: String): Boolean = {
counter += 1
if (v == "abc") true
else false
}
override def applyOrElse[A1 <: String, B1 >: Int](v: A1, default: A1 => B1): B1 = {
counter += 1
if (v == "abc") {
v.length
}
else {
default(v)
}
}
}
val optionFn: (String) => Option[Int] = {
(v: String) => {
counter += 1
if (v == "abc") {
Some(v.length)
}
else {
None
}
}
}
java.io.NotSerializableException: ***.extractors.ExtractorSuite$$anon$1
Serialization stack:
- object not serializable (class: ***.extractors.ExtractorSuite$$anon$1, value: <function1>)
- field (class: scala.Some, name: x, type: class java.lang.Object)
- object (class scala.Some, Some(<function1>))
at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:47)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:101)
at ***.tests.TestMixin$$anonfun$assertSerializable$1.apply(TestMixin.scala:61)
...
パーシャルファンクション&共通機能との大きな違いは何ですか?
私は、=>構文砂糖は自動的にシリアライズ可能なケースを生成しますが、=>砂糖はありませんか? REPL – tribbloid
であなたの所見を確認させてください。どちらもありません。私はそれをより明確にするために答えを編集しました。 –