Scala 火花卡桑德拉连接器-where条款

Scala 火花卡桑德拉连接器-where条款,scala,spark-cassandra-connector,Scala,Spark Cassandra Connector,我正在尝试使用Datasax Cassandra连接器执行选择位置,但出现以下错误: 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 can

我正在尝试使用Datasax Cassandra连接器执行
选择位置
,但出现以下错误:

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
就像在他们的生活中一样

user\u id
是表的
主键
,而且我使用
cqlsh
在终端中尝试了
select where
,它可以工作

我看了一下类似的问题,但没有帮助


正如您所注意到的,spark cassandra连接器在令牌上增加了范围限制。通常,连接器会根据令牌范围将查询拆分为多个查询,以强制每个查询针对副本执行,从而确保数据的局部性。 在您的例子中,您提供了user_id=value的完整分区键(可以说,Spark在这种情况下不是合适的工具,但我不知道您的应用程序在做什么)。关于Spark Cassandra连接器项目已经进行了一些讨论,我不知道它是否发生过


但是,如果您切换到Cassandra 2.2或3(我假设您运行的是Cassandra 2.1),Cassandra将接受生成的查询(分区键受相等和范围限制的查询)。我在2.2.6和3.0.5上测试了它。

正如您所注意到的,spark cassandra连接器在令牌上增加了范围限制。通常,连接器会根据令牌范围将查询拆分为多个查询,以强制每个查询针对副本执行,从而确保数据的局部性。 在您的例子中,您提供了user_id=value的完整分区键(可以说,Spark在这种情况下不是合适的工具,但我不知道您的应用程序在做什么)。关于Spark Cassandra连接器项目已经进行了一些讨论,我不知道它是否发生过

但是,如果您切换到Cassandra 2.2或3(我假设您运行的是Cassandra 2.1),Cassandra将接受生成的查询(分区键受相等和范围限制的查询)。我在2.2.6和3.0.5上测试了它

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