【发布时间】:2017-05-26 10:36:17
【问题描述】:
我有一个数据库对象,用于插入来自所有 Spark 执行器的数据。当我将此对象定义为static 时,它在这些执行程序中具有null 值。所以我在驱动程序中声明它,广播它然后在每个执行程序中获取它的值。当我运行应用程序时,抛出以下异常:
Exception in thread "main" java.io.NotSerializableException: database.Database
注意事项:
- 执行器类是可序列化的
- 广播对象在该类中被定义为瞬态
- 我删除了瞬态,但它不起作用
【问题讨论】:
-
数据库对象是什么意思? DTO 还是别的什么?
-
请查看How to create a Minimal, Complete, and Verifiable example 并相应地改写您的问题。
-
我创建了一个类来处理连接到数据库和所有数据库交互。
-
您不能序列化数据库连接。它正在正确地大喊
java.io.NotSerializableException -
好。这就是为什么我使用广播,在所有执行者之间共享这个对象。鉴于我得到了这个异常,这是否意味着广播变量应该是可序列化的?
标签: java apache-spark