Spark中序列化的目的:序列化后数据更小,更便于传输和存储, 但是会耗用更多的cpu资源。
Spark中数据共有两种序列化方式:
- java :(默认) 兼容性好, 但是慢、较大。
- Kryo :快, 较小, 但是需要手动地注册用到的类。
kryo的用法 :
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("ser_test_app")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.registerKryoClasses(Array(classOf[DataCaseClass]))
val spark: SparkSession = SparkSession.builder()
.config(sparkConf)
.getOrCreate()
val sc: SparkContext = spark.sparkContext
val data= sc.textFile("file:///d:/weblog.txt").map(x => DataCaseClass(x))
data.persist(StorageLevel.MEMORY_ONLY_SER)
.foreach(println(_))
其中, 虽然不注册类程序也不会报错, 但是性能会变得很差。