Cassandra 2.1,Spark 1.1,spark-cassandra-connector 1.1
我有一个非常高的Key系列键值对。我还有一个RDD的密钥,我想从CF中选择
我想做的事情就像是
import com.datastax.spark.connector._
val ids = ...
val pairs = id.map{
id => sc.cassandraTable("cf", "tallTable")
.select("the_key", "the_val")
.where("the_key = ?", id)
}
但是,在地图中引用Spark Context会导致NPE。我可以从完整的tallTable中创建一个RDD,然后加入id,但这是一个非常慢的操作,我想避免它。
有没有办法像这样从Cassandra读取一组键?
答案 0 :(得分:1)
spark-cassandra连接器提供了一种优化的方法来实现密钥的RDD与Cassandra表的连接:
// Given a collection of ids
val ids = Seq(id,...)
// Make an RDD out of it
val idRdd = sc.parallelize(ids)
// join the ids with the cassandra table to obtain the data specific to those ids
val data = idRDD.joinWithCassandraTable("cf", "tallTable")
此功能可从spark-cassandra连接器v1.2开始提供,因此我建议您升级。