该问题通常是由于序列化版本不兼容导致的。解决方法是使用相同的序列化版本,在 Spark 的配置文件中设置以下两个参数:
spark.serializer spark.kryo.registrator
其中,spark.kryo.registrator 可以用于注册自定义类。
示例代码:
// 设置序列化方式为 Kryo SparkConf conf = new SparkConf() .setAppName("MyApp") .setMaster("local") .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") .set("spark.kryo.registrator", "com.example.MyRegistrator");
// 注册自定义类 public class MyRegistrator implements KryoRegistrator { public void registerClasses(Kryo kryo) { kryo.register(MyClass.class); } }
// 使用 SparkContext JavaSparkContext sc = new JavaSparkContext(conf);
// 具体使用方法同常规 Spark 应用程序相同。