[英]Spark dataset encoders: kryo() vs bean()
在 Spark 中處理數據集時,我們需要指定用於序列化和反序列化對象的編碼器。 我們可以選擇使用Encoders.bean(Class<T>)
或Encoders.kryo(Class<T>)
。
這些有什么不同,使用一種與另一種的性能影響是什么?
出於多種原因,始終建議使用 Kryo 序列化到 Java 序列化。 其中一些在下面。
Cache()
和Persist()
。 這在像Shuffling
這樣的階段非常有用。saveAsObjectFile
上RDD和objectFile
方法上SparkContext
僅支持Java序列。sparkConf.registerKryoClasses(Array( classOf[A], classOf[B], ...))
或sparkConf.set("spark.kryo.registrator", "MyKryoRegistrator")
。 這節省了大量空間並避免了不必要的元數據。 bean()
和javaSerialization()
之間的區別在於javaSerialization()
使用通用 java 序列化來序列化T
類型的對象。 此編碼器將T
映射到單個字節數組(二進制)字段。 其中 bean 為T
類型的 Java Bean 創建了一個編碼器。 它們都使用 Java 序列化,唯一的區別是它們如何將對象表示為字節。
從文檔中引用
JavaSerialization 效率極低,只能作為最后的手段使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.