- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想在 RDD 的转换中访问伴生对象的方法。为什么以下不起作用:
import org.apache.spark.rdd.RDD
import spark.implicits._
import org.apache.spark.sql.{Encoder, Encoders}
class Abc {
def transform(x: RDD[Int]): RDD[Double] = { x.map(Abc.fn) }
}
object Abc {
def fn(x: Int): Double = { x.toDouble }
}
implicit def abcEncoder: Encoder[Abc] = Encoders.kryo[Abc]
new Abc().transform(sc.parallelize(1 to 10)).collect
上面的代码抛出一个java.io.NotSerializableException
:
org.apache.spark.SparkException: Task not serializable
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:298)
at org.apache.spark.util.ClosureCleaner$.org$apache$spark$util$ClosureCleaner$$clean(ClosureCleaner.scala:288)
at org.apache.spark.util.ClosureCleaner$.clean(ClosureCleaner.scala:108)
at org.apache.spark.SparkContext.clean(SparkContext.scala:2094)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:370)
at org.apache.spark.rdd.RDD$$anonfun$map$1.apply(RDD.scala:369)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:362)
at org.apache.spark.rdd.RDD.map(RDD.scala:369)
at Abc.transform(<console>:19)
... 47 elided
Caused by: java.io.NotSerializableException: Abc
Serialization stack:
- object not serializable (class: Abc, value: Abc@4f598dfb)
- field (class: Abc$$anonfun$transform$1, name: $outer, type: class Abc)
- object (class Abc$$anonfun$transform$1, <function1>)
at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:46)
at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:100)
at org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:295)
... 57 more
即使为类 Abc 定义一个 Encoder
在这里也无济于事。但更重要的问题是,为什么要尝试对 Abc 类的对象进行序列化?我的第一个想法是伴随对象是该类的单例对象,因此可能会尝试对其进行序列化。但似乎并非如此,因为当我从另一个类(class)调用 Abc.fn 时:
class Xyz {
def transform(x: RDD[Int]): RDD[Double] = { x.map(Abc.fn) }
}
implicit def xyzEncoder: Encoder[Xyz] = Encoders.kryo[Xyz]
new Xyz().transform(sc.parallelize(1 to 10)).collect
我得到一个 java.io.NotSerializableException: Xyz
最佳答案
这是一篇讨论 Apache Spark 中“可序列化”对象与“不可序列化对象”的精彩文章:
Using Non-Serializable Objects in Apache Spark, Nicola Ferraro
这篇文章提供了几个建议:
在您的具体案例中发生了什么
一些替代方案,因此您的对象不需要“可序列化”
关于java - 为什么这个 Spark 代码抛出 java.io.NotSerializableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827007/
class NotSerializable {} class MyClass implements Serializable { private NotSerializable field; /
尝试序列化 Lot 对象并将其发送到套接字。获取错误: java.io.NotSerializableException: com.server.ClientServiceThread 为什么? pu
我们在集群 QA 环境中遇到以下错误。我们在 linux 上运行 Weblogic 10.3.3.0。 #### > 0) { message.append(", Name "); }
在我的最后一个问题没有得到答案后,我将这件事重新表述为最简单的形式。 1 个按钮、1 个点击监听器、1 个可序列化对象和 1 个用于输出可序列化对象的子例程。此代码基于我在 stackoverflow
我正在尝试通过套接字连接发送定制对象。该类实现了可序列化,但当我尝试将对象写入套接字时,构造函数仍然抛出 NotSerializableException。我将在下面发布相关代码: public cl
基本上,我编写了一个在屏幕上绘制形状并将每个形状保存到 ArrayList 中的程序。我想做的是弄清楚如何将 ArrayList 保存到一个文件中,以便我可以稍后调用它并编辑已经存在的形状。 所以我一
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: java.lang.reflect.
一段时间以来,我一直在尝试用序列化解决我的问题,不幸的是我迷路了。如果有人可以帮助我找到问题,我将不胜感激。我已经在每个类中实现了 Serializable。 已解决:问题是,一个类实现了 Seria
我正在尝试使用对象输出流将我制作的对象写入文件,每当我运行代码时,它都会抛出 NotSerializableException。如果您看到我做错了什么,请告诉我。 保存方法: public stati
我已经使用 OpenSSO 提供的 SAML 库实现了一个安全模块,但是我的服务器没有正确关闭并出现异常: java.io.NotSerializableException: com.sun.iden
我在社交网站上工作,我正在使用 JSF 2.2我有一些带有 View 范围的bean,在这些bean服务中注入(inject)了。 我有时在 tomcat 中遇到著名的 NotSerializable
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException 为什么在启动我的服务器 Tomcat
我有一个 Activity,其中有一个私有(private)类数据。在 onSaveInstanceState 方法中,我尝试将此保存为 Data 的一个实例。这是我的整个 Activity : pu
我的两个类也设计为创建一个 StudentData 对象数组(姓名、出生日期和 ID),其中包括一个 toString 覆盖以打印出所有变量。然后序列化数组并将其保存到名为 studentdata.t
这是我的小类: import java.io.Serializable; public abstract class SerializableCallback extends Callback imp
在我的 Spark 代码中,我试图从一个 csv 文件创建一个 IndexedRowMatrix。但是,我收到以下错误: Exception in thread "main" org.apache.s
我编写了一个 GUI,它使用 RMI 与服务器应用程序连接。因为 GUI 必须向在线用户显示一个线程刷新包含“在线用户列表”的 JLabel。有时我在运行时遇到这个异常: Caused by: jav
我有一个过滤项目的界面: public interface KeyValFilter extends Serializable { public static final long seria
我正在处理 jenkinsfile 并且在第三阶段遇到异常: an exception which occurred: in field com.cloudbees.groovy.cps.impl.B
我在 JSF 2 中使用 spring 3 我用 spring bean 替换了 JSF 管理的 bean,方法是在 bean 之上添加: @Component("mybean") @Scope("s
我是一名优秀的程序员,十分优秀!