在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,Encoders}
implicit val myEncoder: Encoder[myobj] = Encoders.kryo[myobj]
val ds = spark.createDataset(Seq(new myobj(1,"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
那样),这意味着什么吗?它不应该将对象序列化为二进制格式吗? - 两个串行器之间在性能上有什么区别?