5

Java のスパーク 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 コードは機能しますか? SparkWHEREはon パーティション キー (aおよびbあなたの場合) を許可しないと思いました。

いずれにせよ、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 に答える