5

我面临一些关于 java 的 spark cassandra 连接器过滤的问题。Cassandra 允许使用 IN 子句按分区键的最后一列进行过滤。例如

create table cf_text
(a varchar,b varchar,c varchar, primary key((a,b),c))

Query : select * from cf_text where a ='asdf' and b in ('af','sd');

sc.cassandraTable("test", "cf_text").where("a = ?", "af").toArray.foreach(println)

我如何指定在 spark 的 CQL 查询中使用的 IN 子句?如何也可以指定范围查询?

4

1 回答 1

7

只是想知道,但是您上面的 Spark 代码有效吗?我认为 Spark 不允许WHERE分区键(ab您的情况下),因为它在后台使用它们(请参阅此问题的最后一个答案):Spark Datastax Java API Select statements

在任何情况下,使用 Cassandra Spark 连接器,您都可以堆叠WHERE子句,并且IN可以使用List<String>.

List<String> valuesList = new ArrayList<String>();
valuesList.Add("value2");
valuesList.Add("value3");

sc.cassandraTable("test", "cf")
    .where("column1 = ?", "value1")
    .where("column2 IN ?", valuesList)
    .keyBy(new Function<MyCFClass, String>() {
                public String call(MyCFClass _myCF) throws Exception {
                    return _myCF.getId();
                }
            });

请注意,在Cassandra/CQL 中使用 IN 的常规规则在这里仍然适用。

范围查询的功能类似:

sc.cassandraTable("test", "person")
    .where("age > ?", "15")
    .where("age < ?", "20")
    .keyBy(new Function<Person, String>() {
                public String call(Person _person) throws Exception {
                    return _person.getPersonid();
                }
            });
于 2015-06-25T14:39:24.573 回答