Spark的序列化 默認為org.apache.spark.serializer.JavaSerializer,可選org.apache.spark.serializer.KryoSerializer,實際上只要是org.apache.spark.serializer的子類就可以了,不過如果只是應用,大概你不會自己去實現一個的。
序列化對于spark應用的性能來說,還是有很大影響的,在特定的數據格式的情況下,KryoSerializer的性能可以達到JavaSerializer的10倍以上,當然放到整個Spark程序中來考量,比重就沒有那么大了,但是以Wordcount為例,通常也很容易達到30%以上的性能提升。
而對于一些Int之類的基本類型數據,性能的提升就幾乎可以忽略了。
KryoSerializer依賴Twitter的Chill庫來實現,相對于JavaSerializer,主要的問題在于不是所有的Java Serializable對象都能支持。
需要注意的是,這里可配的Serializer針對的對象是Shuffle數據,以及RDD Cache等場合,而Spark Task的序列化是通過spark.closure.serializer來配置,但是目前只支持JavaSerializer。