[英]Spark Cassandra Connector - where clause
我正在嘗試使用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()
它就像在他們的文檔中一樣
user_id
是表的primary key
,我也嘗試使用cqlsh
在終端中select where
並且它可以工作。
我看了類似的問題,但沒有幫助
正如您所注意到的,spark-cassandra-connector在令牌上添加了范圍限制。 通常,您的查詢會根據令牌范圍由連接器拆分為多個查詢,以強制執行針對副本的每個查詢,從而確保數據位置。 在您的情況下,您使用user_id = value提供完整的分區鍵(可以說,在這種情況下,Spark不是正確的工具,但我不知道您的應用程序在做什么)。 已經有一些關於Spark-Cassandra-Connector項目的討論來修復它,我不知道它是否發生過。
但是,如果切換到Cassandra 2.2或3(我假設您正在運行Cassandra 2.1),Cassandra將接受生成的查詢(分區鍵受到相等和范圍限制的查詢)。 我在2.2.6和3.0.5上進行了測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.