【问题标题】:Querying non Primary Column in Cassandra using Spark in JAVA在 JAVA 中使用 Spark 查询 Cassandra 中的非主列
【发布时间】:2018-09-02 07:01:59
【问题描述】:

我想查询我的 Cassandra 表,其架构是

  CREATE TABLE IF NOT EXISTS mykeyspace.user (
    id text,
    login text,
    password text,
    firstname text,
    lastname text,
    email text,
   PRIMARY KEY(id)
   );

我想使用显然是非主列的登录名和名字来查询此表。我在某处读到 Spark 在这些场景中非常有用。所以我想知道如何使用 Spark 查询具有非主列的 cassandra。

我也在使用 Java 来查询数据库。

【问题讨论】:

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


    【解决方案1】:

    最简单的解决方案是使用jdbc 连接器(例如profress makes one

    Spark 的 jdbc support 有很好的文档记录

    然后您可以使用 spark 数据帧来查询和使用 Cassandra 表,例如

    df = spark.read.jdbc('jdbc:cassandra:dbserver', 'mykeyspace.user', connectionProperties).filter('login = "foo" and firstname = "bar"')
    

    (对不起,我的示例是在 python 中,但 java api 几乎相同)?

    【讨论】:

      【解决方案2】:

      Spark 用于批量操作,例如扫描整个表或将其与其他表连接。 在您的情况下,最好使用二级索引或物化视图: https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateIndex.html https://docs.datastax.com/en/cql/3.3/cql/cql_reference/cqlCreateMaterializedView.html

      所以要在登录字段上使用索引:

      CREATE INDEX ON mykeyspace.user (login);
      select * from mykeyspace.user where login = 'a';
      

      【讨论】:

        猜你喜欢
        • 2017-08-19
        • 2017-05-30
        • 2018-01-01
        • 2019-08-11
        • 2014-11-11
        • 2017-02-22
        • 2017-01-04
        • 2018-10-31
        • 2015-09-30
        相关资源
        最近更新 更多