由于AWS Glue中使用的Spark版本可能与本地环境中使用的Spark版本不同,因此需要在Glue Job中注册必要的序列化类。在本例中,未在Kryo中注册org.apache.spark.util.collection.CompactBuffer类。
解决此问题的方法是在AWS Glue Job中注册类。可以使用以下代码示例:
import com.esotericsoftware.kryo.Kryo
import org.apache.spark.serializer.KryoRegistrator
import org.apache.spark.util.collection.CompactBuffer
class MyRegistrator extends KryoRegistrator {
override def registerClasses(kryo: Kryo) {
kryo.register(classOf[CompactBuffer[_]])
}
}
val spark: SparkSession = SparkSession.builder
.appName("MyApp")
.config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.config("spark.kryo.registrator", classOf[MyRegistrator].getName)
.getOrCreate()
// 在这里执行Glue Job代码
在这段代码中,我们创建了一个kryo注册器类MyRegistrator,并在其中注册了CompactBuffer类。我们将该注册器类传递给SparkSession对象,以确保正确注册了所有所需的类。请在执行Glue Job代码之前添加此代码段。