シリアル化の有無にかかわらず実行時間を測定し、kryo オブジェクト ストリームをディスクに保存して、spark でキャッシュをシミュレートするために、Apache Spark で Kryo シリアル化をテストしようとしています。
私が設計したテストは、シリアル化された CassandraRDD オブジェクトに Cassandra テーブルを格納することです。
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)
}
}
このコードは機能しますが、CassandraRDD オブジェクトである kvRDD がシリアル化されていないと思われます。
Kryoでシリアル化できるものとできないものに関する規則はありますか? このクラスを kryo.register に登録するにはどうすればよいですか?
kryo.register(ClassOf[CassandraRDD]) で登録しようとすると、実行しようとすると次のエラーが発生します。
Error:(11, 27) class CassandraRDD takes type parameters
kryo.register(classOf[CassandraRDD])
^
私はScalaとKryoに非常に慣れていないことに注意してください。
よろしくお願いします