此链接讨论了通过Java API写入HBase的一种很好的方式。
Writing to HBase via Spark: Task not serializable
如何从HBase读取数据。
比如说,我有一个属性名称 - >给我开始和停止行的文件(每行提供一个单独的开始和停止行,可以在不同的服务器之间划分) 其他属性告诉我服务器名称和表名称。 可以请任何给我提供样品,如何做,我试过,但我继续得到不可序列化的错误。
(这是我试过的,Spark serialization error)
任何帮助都将深受赞赏。
答案 0 :(得分:1)
首先 - 你没有给出任何细节。没有人可以帮助确定这种方式没有序列化。
默认情况下,您在Spark中执行的函数使用或引用的任何对象都必须为Serializable
。您可以通过这种方式设计对象,也可以不引用它们。当内部类发挥作用时,引用内容会变得复杂,而Function
通常是内部类。
但是,为什么你的某些东西不是Serializable
,这总是一个直截了当的原因。我建议尽量避免非static
内部类。检查您是否毫无意义地持有对Function
中对象的引用。将它们转换为不保存这些引用,不需要它们,或者仅使用Serializable
值的一部分。接下来,您可能必须标记某些对象Serializable
,如果它们不是,并且让默认序列化管理序列化是有意义的。我不同意@transient
是一个解决办法;它只是让一些字段根本不被发送,这在某些情况下是合适的。当您发现远程计算机上的值已“消失”(未序列化)时,可能会导致令人惊讶的NullPointerException
。