簡體   English   中英

使用IN子句過濾Spark Cassandra連接器

[英]Spark Cassandra connector filtering with IN clause

我正面臨着針對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子句? 如何指定范圍查詢?

只是想知道,但你的Spark代碼上面有效嗎? 我認為Spark不允許分區鍵上的WHERE (在你的情況下為ab ),因為它在引擎蓋下使用它們(參見本問題的最后一個答案): Spark Datastax Java API Select語句

在任何情況下,使用Cassandra Spark連接器,您都可以堆疊WHERE子句,並且可以使用List<String>指定IN

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();
                }
            });

請注意, 使用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();
                }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM