thi*_*ago 5 cassandra apache-spark
我正在评估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)
但不幸的是,我不知道"过滤器"是什么......
小智 8
我认为CassandraRDD错误告诉您在Cassandra中不允许您尝试执行的查询,并且必须在CassandraRDD中加载所有表,然后对此CassandraRDD执行spark过滤操作.
所以你的代码(在scala中)应该是这样的:
val cassRDD= sc.cassandraTable("keyspace name", "table name").filter(row=> row.getDate("timestamp")>=DateFormat('2013-01-01T00:00:00.000Z')&&row.getDate("timestamp") < DateFormat('2013-12-31T00:00:00.000Z'))
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣进行此类查询,可能需要查看其他Cassandra连接器,例如Stratio开发的连接器
小智 8
您可以通过多种方式获得所需的解决方案.
最强大的是使用Straion与Cassandra集成的Lucene索引,它允许您通过服务器端的任何索引字段进行搜索.您的写作时间会增加,但另一方面,您可以查询任何时间范围.您可以在此处找到有关Cassandra的Lucene索引的更多信息.这个扩展版本的Cassandra完全集成到深度火花项目中,因此您可以通过它来充分利用Cassandra中Lucene索引的所有优势.我建议您在执行检索中小型结果集的受限查询时使用Lucene索引,如果要检索大部分数据集,则应使用下面的第三个选项.
另一种方法(取决于应用程序的工作方式)可能是截断您的时间戳字段,以便您可以使用IN运算符查找它.问题是,据我所知,你不能使用spark-cassandra-connector,你应该使用没有与Spark集成的直接Cassandra驱动程序,或者你可以看一下深火花项目即将发布的新功能即将发布.您的查询看起来像这样:
select * from datastore.data where timestamp IN ('2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', ... , '2013-12-31')
Run Code Online (Sandbox Code Playgroud)
,但是,正如我之前所说,我不知道它是否符合您的需求,因为您可能无法截断您的数据并按日期/时间对其进行分组.
您拥有的最后一个选项,但效率较低,是将完整数据集带到您的spark群集并在RDD上应用过滤器.
免责声明:我为Stratio工作:-)如果您需要任何帮助,请不要犹豫与我们联系.
我希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
3250 次 |
| 最近记录: |