java - Spark SQL - 集合(集)上的 Cassandra SqlContext 查询

标签 java cassandra apache-spark apache-spark-sql

假设我有一个像这样的表:

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 的索引表,但它也不起作用。我可以查询索引集合吗?我该怎么做?

最佳答案

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

因此,我将使用 CONTAINS 'book1' 创建一个 RDD,然后使用 CONTAINS 'book2' 创建另一个 RDD,然后在 userid 字段上对两个 RDD 进行联接。这将为您提供在其图书集中同时拥有 book1 和 book2 的用户的结果 RDD。

关于java - Spark SQL - 集合(集)上的 Cassandra SqlContext 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776378/

相关文章:

json - 有没有一种优雅的方式通过 CQL (Cassandra) 执行 JSON 更新?

sql-server - pyspark : spark-submit is not able to perform the desired job

java - JavaCV 中的 cvCreateCameraCapture、cvCreateFileCapture 等在哪里?

java - 调用 user.getPhotoUrl() Firebase 时出现安全异常

java - Array.toString(boolean) 值

java - 在客户端验证行比使用整个主键的二级索引更好?

python - cassandra.InvalidRequest : code=2200 [Invalid query] message ="Keyspace ' ' does not exist"

java - Netbeans 绑定(bind)字段不更新 GUI

apache-spark - 如何检索输出大小和从 Spark UI 写入的记录等指标?

apache-spark - 如何在范围内划分数字列并为 apache spark 中的每个范围分配标签?