在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
,有什么意义吗?它不应该把对象序列化成二进制格式吗?
两个序列化程序在性能方面有什么不同?
暂无答案!
目前还没有任何答案,快来回答吧!