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