使用Kryo和Spark序列化Cassandra表

时间:2015-03-20 13:58:16

标签: serialization cassandra apache-spark kryo

我正在尝试使用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​​很新。

非常感谢你提前

1 个答案:

答案 0 :(得分:0)

请尝试使用CassandraRDD序列化

 kryo.register(classOf[CassandraRDD[Any]])