Apache spark 如何使用Spark中的Kryo序列化程序缓存数据帧?

Apache spark 如何使用Spark中的Kryo序列化程序缓存数据帧?,apache-spark,dataframe,apache-spark-sql,kryo,Apache Spark,Dataframe,Apache Spark Sql,Kryo,我正在尝试使用Spark和Kryo序列化程序以更少的内存成本存储一些数据。现在我遇到了一个问题,我无法用Kryo序列化程序在内存中保存DataFram e(其类型为Dataset[Row])。我以为我需要做的就是将org.apache.spark.sql.Row添加到classesToRegister,但仍然发生错误: spark shell--conf spark.kryo.classesToRegister=org.apache.spark.sql.Row--conf spark.seria

我正在尝试使用Spark和Kryo序列化程序以更少的内存成本存储一些数据。现在我遇到了一个问题,我无法用Kryo序列化程序在内存中保存DataFram e(其类型为Dataset[Row])。我以为我需要做的就是将
org.apache.spark.sql.Row添加到classesToRegister
,但仍然发生错误:

spark shell--conf spark.kryo.classesToRegister=org.apache.spark.sql.Row--conf spark.serializer=org.apache.spark.serializer.KryoSerializer--conf spark.kryo.registrationRequired=true
import org.apache.spark.sql.SparkSession
导入org.apache.spark.sql.types.StructType
导入org.apache.spark.sql.types.StructField
导入org.apache.spark.sql.types_
导入org.apache.spark.sql.Row
导入org.apache.spark.storage.StorageLevel
val schema=StructType(StructField(“name”,StringType,true)::StructField(“id”,IntegerType,false)::Nil)
val seq=seq((“你好”,1),(“世界”,2))
val df=spark.createDataFrame(sc.emptyRDD[Row],schema).persist(仅限StorageLevel.MEMORY\u SER)
df.count()
出现如下错误:


我认为在
classestoreregister
中添加
byte[][]
不是一个好主意。那么,我应该如何使用Kryo在内存中存储数据帧呢?

Dataset
s不使用标准的序列化方法。它们使用专门的列存储和自己的压缩方法,所以您不需要使用Kryo序列化程序存储数据集