我正在评估spark-cassandra-connector,我正在努力尝试让分区键的范围查询工作.
根据连接器的文档,似乎可以使用相等或IN运算符对分区键进行服务器端过滤,但不幸的是,我的分区键是时间戳,所以我不能使用它.
所以我尝试使用Spark SQL和以下查询('timestamp'是分区键):
select * from datastore.data where timestamp >= '2013-01-01T00:00:00.000Z' and timestamp < '2013-12-31T00:00:00.000Z'
Run Code Online (Sandbox Code Playgroud)
虽然该作业产生200个任务,但查询不返回任何数据.
此外,我可以确保自从在cqlsh上运行查询后返回数据(使用'token'函数进行适当的转换)DOES返回数据.
我在独立模式下使用spark 1.1.0.Cassandra是2.1.2,连接器版本是'b1.1'分支.Cassandra驱动程序是DataStax的"主"分支.Cassandra集群覆盖在具有3个服务器的spark集群上,复制因子为1.
有人知道吗?
更新:尝试基于分区键(使用CassandraRDD.where方法)进行服务器端筛选时,我收到以下异常:
Exception in thread "main" java.lang.UnsupportedOperationException: Range predicates on partition key columns (here: timestamp) are not supported in where. Use filter instead.
Run Code Online (Sandbox Code Playgroud)
但不幸的是,我不知道"过滤器"是什么......