1

可以说我有一张像这样的桌子:

CREATE TABLE USER (
    userid ascii,
    books set<text>
    PRIMARY KEY (userid)
);

和索引:

create index on USER (books);

我想使用 sql 上下文查询书籍。我正在做的是:

CassandraSQLContext cassandraContext = new CassandraSQLContext(sparkContext);
SchemaRDD userTable = cassandraContext.sql("SELECT * FROM keyspace.user");
userTable.registerTempTable("usertable");

以下查询不适用于Cassandra :

SchemaRDD userTable = cassandraContext.sql("SELECT * FROM keyspace.user where books CONTAINS 'book1' and books CONTAINS 'book2'");

它返回只有“book1”的用户。我尝试过类似的查询,books CONTAINS ('book1', 'book2')但没有一个有效。

我可以在注册表上做的是:

SchemaRDD users = cassandraContext.sql("SELECT * FROM usertable where userid='some_user_id'");

我想做的是通过以下书籍查询:

SchemaRDD users = cassandraContext.sql("SELECT * FROM usertable where books IN ('book1', 'book2')");

或类似的查询。

但它不起作用。它返回 0 条记录。我试图注册名为的索引表,user_books_idx但它也没有工作。我可以查询索引集合吗?我该怎么做?

4

1 回答 1

1

似乎 CONTAINS 子句仅适用于每个语句的一个值,因此您可能无法一次将两个不同的 CONTAINS 子句“和”在一起。

所以我会使用 CONTAINS 'book1' 创建一个 RDD,然后我会使用 CONTAINS 'book2' 创建另一个 RDD,然后我会在 userid 字段上连接两个 RDD。这应该会为您提供书籍集中同时具有 book1 和 book2 的用户的 RDD。

于 2015-01-09T01:21:56.450 回答