Java 为什么我的Spark程序在IntelliJ中运行良好,但抛出;org.apache.spark.SparkException:任务不可序列化”;提交之后?
我的代码如下所示(抱歉,我无法显示完整代码是有原因的): 在IntelliJ中,一切都很好。但是在使用Java 为什么我的Spark程序在IntelliJ中运行良好,但抛出;org.apache.spark.SparkException:任务不可序列化”;提交之后?,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,我的代码如下所示(抱歉,我无法显示完整代码是有原因的): 在IntelliJ中,一切都很好。但是在使用spark submit构建并提交jar文件后,它抛出org.apache.spark.sparkeexception:Task not serializable。堆栈跟踪指向mapToPair中的lambda 我的问题是:在IDE中运行和在独立模式下运行有什么区别?我怎样才能使它正常工作呢?好的,我刚刚想出了解决办法。对于不可序列化的类,特别是来自第三方库的类,您可以使用Spark,如下所示:
spark submit
构建并提交jar文件后,它抛出org.apache.spark.sparkeexception:Task not serializable
。堆栈跟踪指向mapToPair
中的lambda
我的问题是:在IDE中运行和在独立模式下运行有什么区别?我怎样才能使它正常工作呢?好的,我刚刚想出了解决办法。对于不可序列化的类,特别是来自第三方库的类,您可以使用Spark,如下所示:
import com.twitter.chill.MeatLocker;
public class MyClass {
final MeatLocker<A> _field1; // Non-serializable object
public void doSomething() {
myJavaDStream...
.map(t -> {
// call _field1.get() instead of _field1 to unwrap the value
})
}
}
import com.twitter.chill.MeatLocker;
公共类MyClass{
final MeatLocker _field1;//不可序列化对象
公共无效剂量测定法(){
myJavaDStream。。。
.map(t->{
//调用_field1.get()而不是_field1来展开值
})
}
}
您的类包含两个不可序列化的对象,因此根据定义,您的类是不可序列化的。在IntelliJ内部运行时,所有内容都在IntelliJ的本地运行,因此它不必实际分发类。在独立模式下运行时,它必须分发(并因此序列化)类,这就是为什么在独立模式下会看到错误。
import com.twitter.chill.MeatLocker;
public class MyClass {
final MeatLocker<A> _field1; // Non-serializable object
public void doSomething() {
myJavaDStream...
.map(t -> {
// call _field1.get() instead of _field1 to unwrap the value
})
}
}