Spark SQL中的Encoders.kryo [T]和Encoders.product [T]之间的区别

在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那样),这意味着什么吗?它不应该将对象序列化为二进制格式吗?
  • 两个串行器之间在性能上有什么区别?
hufengguang 回答:Spark SQL中的Encoders.kryo [T]和Encoders.product [T]之间的区别

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1458969.html

大家都在问