我对在Spark应用程序中使用Serializable的Java类感到困惑。
截至目前,我的申请无异常。我只创建了一个Serializable类,这个类有Spark Streaming代码,转换 (如flatMap),以及forEachRDD等行为。
但是有些类我在这个类中实例化并调用它们的方法,而这些类是不可序列化的。我在一个驱动程序和一个工作节点上运行。
有人可以对此有所了解吗?感谢。
对于下面的代码,SparKInitClass是spark的起点,它调用Main类的opera()方法来做一些工作。
主类使用两个类(OneClass和TwoClass)来完成工作 现在哪些都需要被剔除? (Main,OneClass,TwoClass)?
class SparKInitClass{
SparkSession ss = ...create SparkSession;
new Main().operate();
}
class Main {
public void operate(){
JavaInputDStream<B> messages = KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<A, B>Subscribe(topicsSet, kafkaParams));
OneClass oc = new OneClass();
messages.forEachRDD(record -> {
TwoClass tc= new TwoClass();
tc.compute();
oc.add();
});
} //operate ends here
} //Main class ends here