2015-06-25 117 views
2

我正面臨一些java的spark cassandra連接器過濾問題。 Cassandra允許使用IN子句按分區鍵的最後一列進行篩選。 e.g使用IN子句的Spark Cassandra連接器過濾

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) 

怎麼算我指定是在火花CQL查詢中使用IN子句?如何指定範圍查詢?

回答

2

只是想知道,但你的Spark代碼上面的工作?我認爲星火不會允許(在你的情況ab)在分區鍵一WHERE,因爲它使用它們的引擎蓋下(見最後這個問題的答案):Spark Datastax Java API Select statements

在任何情況下,與卡桑德拉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(); 
       } 
      }); 

請注意,​​仍適用於此處。

範圍查詢功能類似的方式:

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

呀火花適用於分區鍵where子句。我錯過了上面的spark代碼的分區鍵(a,b)om的b列。 a和b都應該出現在where子句中。 sc.cassandraTable(「test」,「cf_text」)。where(「a =?」,「af」)。where(「b =?」,「df」).Array.foreach(println) – 107

+0

謝謝。創建列表適合我 – 107

相關問題