【问题标题】:Spark-cassandra connector: select list of keysSpark-cassandra 连接器:选择键列表
【发布时间】:2015-09-21 10:30:09
【问题描述】:

Cassandra 2.1、Spark 1.1、spark-cassandra-connector 1.1

我有一个非常高的键值对列族。而且我还有一个我想从该 CF 中选择的键的 RDD

我想做的是像

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 上下文会导致 NPE。我可以从完整的 tallTable 中创建一个 RDD,然后加入 id,但是这是一个非常缓慢的操作,我想避免它。

有没有办法像这样从 Cassandra 读取一组密钥?

【问题讨论】:

    标签: scala cassandra apache-spark spark-cassandra-connector


    【解决方案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 开始可用,因此我建议您升级。

    【讨论】:

    • 谢谢。这不是您第一次帮助我解决 Spark 问题!该版本的连接器需要升级到我的 Spark 版本以及至少 1.2,对吗?我希望推迟升级,但我认为这足以证明它的合理性。
    • @Metropolis 您还可以使用基本的 Java 驱动程序按分区加载密钥。这是更多的代码。我会说升级——如果可能的话——是更好的选择。
    • 谢谢。我刚刚升级并测试了 joinWithCassandraTable 函数。一旦我确信它有效,我就接受了你的回答。
    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 2015-10-28
    • 1970-01-01
    • 2016-06-04
    • 2017-03-04
    • 2021-12-10
    • 2015-10-08
    • 2015-03-12
    相关资源
    最近更新 更多