序列化—spark sql中encoders.kryo[t]和encoders.product[t]之间的差异

4xrmg8kj  于 2021-05-24  发布在  Spark
关注(0)|答案(0)|浏览(785)

在spark,我可以做到两个:

case class MyObj(val i: Int, val j: String)

import org.apache.spark.sql.{Encoder, Encoders}
implicit val myEncoder: Encoder[MyObj] = Encoders.product[MyObj] 

val ds = spark.createDataset(Seq(new MyObj(1, "a"),new MyObj(2, "b"),new MyObj(3, "c")))

ds.show

//+---+---+
//|  i|  j|
//+---+---+
//|  1|  a|
//|  2|  b|
//|  3|  c|
//+---+---+

而且,

case class MyObj(val i: Int, val j: String)

import org.apache.spark.sql.{Encoder, Encoders}
implicit val myEncoder: Encoder[MyObj] = Encoders.kryo[MyObj] 

val ds = spark.createDataset(Seq(new MyObj(1, "a"),new MyObj(2, "b"),new MyObj(3, "c")))

ds.show

//+--------------------+
//|               value|
//+--------------------+
//|[01 00 24 6C 69 6...|
//|[01 00 24 6C 69 6...|
//|[01 00 24 6C 69 6...|
//+--------------------+

我假设他们使用不同的序列化程序? Encoders.product 不显示二进制格式(如 Encoders.kryo 做某事时 .show ,有什么意义吗?它不应该把对象序列化成二进制格式吗?
两个序列化程序在性能方面有什么不同?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题