spark支持使用kryo序列化機制。kryo序列化機制,比默認的java序列化機制,速度要快,序列化后的數據要更小,大概是java序列化機制的1/10,所以kryo序列化優化后,可以讓網絡傳輸的數據變少,在集群中耗費的內存資源大大減少。
kryo序列化機制,一旦啟用以后,會生效的幾個地方:
1、算子函數中使用到的外部變量
2、持久化RDD時進行序列化,StorageLevel.MEMORY_ONLY_SER
3、shuffle
那么如何設置kryo序列化呢?
第一步,在sparkconf中設置:SparkConf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
第二步,注冊你使用到的,需要通過kryo序列化的一些自定義類,SparkConf.registerKryoClasses(),項目中使用SparkConf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer").registerKryoClasses(new Class[]{CategorySortKey.class})