我正在尝试使用Apache Spark测试Kryo序列化,以便测量执行和不使用序列化的执行时间,并将kryo对象流保存到磁盘以模拟spark下的缓存。
我设计的测试是将Cassandra表存储在序列化的CassandraRDD对象中。
生成CassandraRDD的Scala代码如下:
import com.datastax.spark.connector._
import org.apache.spark.{SparkConf, SparkContext}
object SparkCassandra {
def main(args: Array[String]): Unit ={
val conf = new SparkConf(true).set("spark.cassandra.connection.host","mycassandraip")
conf.set("spark.serializer","org.apache.spark.serializer.KryoSerializer")
val sc = new SparkContext("local","test",conf)
//Access to cassandra table
val kvRDD = sc.cassandraTable("test","kv")
kvRDD.collect().foreach(println)
}
}
此代码有效,但我怀疑kvRDD,即CassandraRDD对象未被串行化。
是什么规则可以和不能用Kryo进行序列化? 我如何用kryo.register注册这个类?
如果我尝试注册kryo.register(ClassOf [CassandraRDD]),尝试执行时会出现以下错误:
Error:(11, 27) class CassandraRDD takes type parameters
kryo.register(classOf[CassandraRDD])
^
请注意我对Scala和Kryo很新。
非常感谢你提前
答案 0 :(得分:0)
请尝试使用CassandraRDD序列化
kryo.register(classOf[CassandraRDD[Any]])