2016-05-03 3 views
1

私はDatasax Cassandra Connectorを使用してselect whereをやろうとしているが、私は次のエラーを取得しています:スパークカサンドラコネクタ - 句

java.io.IOException: Exception during preparation of SELECT "path" FROM "tracking"."user_page_action" WHERE token("user_id") > ? AND token("user_id") <= ? AND user_id = ? ALLOW FILTERING: user_id cannot be restricted by more than one relation if it includes an Equal 

connectorは、他の制限を追加しない理由私は本当に理解していません。

これは私が読んしようとしている方法です:

spark.cassandraTable(keySpace,table).select(column).where(whereColumn + " = ?", whereColumnValue).collect() 

、それはちょうど彼らのdocumentation

user_idのようにテーブルのprimary keyでされており、また、私が使用して、端末にselect whereを試してみましたcqlshと動作します。

私は同様の質問を見ていたが、あなたは、トークンの火花カサンドラ・コネクタを追加範囲の制限に気づいたとして、彼らは

Dataframe where clause doesn't work when use spark cassandra connector

Spark Cassandra connector - where clause

答えて

0

役立ちませんでした。通常、クエリはコネクタによってトークン範囲に応じたいくつかのクエリに分割され、各クエリがレプリカに対して実行され、データの局所性が保証されます。 あなたの場合、フルパーティションキーにuser_id = valueを指定します(おそらくSparkはこの場合適切なツールではありませんが、アプリケーションが何をしているのかわかりません)。 Spark-Cassandra-Connectorプロジェクトに関する議論がありましたが、それが起こったかどうかは分かりません。

しかし、Cassandra 2.2または3(私はあなたがCassandra 2.1を実行していると仮定しています)に切り替えると、Cassandraは生成されたクエリ(パーティションキーが等価と範囲の両方によって制限されているもの)を受け入れます。私は2.2.6と3.0.5でそれをテストしました。