107*_*107 3 java cql cassandra apache-spark spark-cassandra-connector
我在使用针对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)
Run Code Online (Sandbox Code Playgroud)
我如何指定在spark的CQL查询中使用的IN子句?如何也可以指定范围查询?
只是想知道,但是上面的Spark代码是否起作用?我以为Spark不允许WHERE
在分区键上(a
并且b
在您的情况下),因为它在幕后使用它们(请参阅此问题的最后答案):Spark Datastax Java API Select语句
无论如何,使用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();
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,将IN与Cassandra / CQL一起使用的正常规则在这里仍然适用。
范围查询的功能类似:
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();
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3348 次 |
最近记录: |