当前位置: 首页 > 知识库问答 >
问题:

Spark Cassandra连接器-分区密钥范围查询

仇睿
2023-03-14

因此,我尝试使用Spark SQL进行以下查询('timestamp'是分区键):

select * from datastore.data where timestamp >= '2013-01-01T00:00:00.000Z' and timestamp < '2013-12-31T00:00:00.000Z'

虽然作业产生200个任务,但查询不会返回任何数据。

另外,我可以保证会返回数据,因为在cqlsh上运行查询(使用'token'函数进行适当的转换)确实会返回数据。

Exception in thread "main" java.lang.UnsupportedOperationException: Range predicates on partition key columns (here: timestamp) are not supported in where. Use filter instead.

但不幸的是我不知道什么是“过滤器”...

共有1个答案

谷隐水
2023-03-14

我认为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'))

如果您对进行这种类型的查询感兴趣,您可能需要查看其他Cassandra连接器,比如Stratio开发的连接器

 类似资料:
  • 我有一个表格,记录在我的网站上执行的用户活动。我的桌子结构看起来像: 现在我想取过去5分钟内收到的所有记录。 为了做同样的事情,我正在使用 但是这个查询没有返回任何结果

  • 问题内容: 使用oracle中的范围分区,我们将大量数据按年值进行了分区。我们使用了范围分区,但每个分区仅包含一年的数据。当我们编写针对特定年份的查询时,oracle从该分区获取信息,但仍会检查年份是否是我们指定的年份。由于今年列不是索引的一部分,因此它从表中获取年份并进行比较。我们已经看到,每当查询去获取表数据时,它就会变得太慢。 我们可以以某种方式避免oracle比较年份值,因为我们确定知道分

  • 我正在学习Cassandra,并有一个关于分区/集群键的问题。 我有一个表,存储数据的股份,如行业的分支,最近6/12个月的业绩,名称等。 该表如下所示: 多谢了,伙计们

  • 问题内容: 我想查询日期范围内的elasticsearch文档。我现在有两个选择,两个都适合我。已经测试了他们两个。1.范围查询2.范围过滤器 由于我现在的数据集很小,因此无法测试它们的性能。两者有什么区别?哪个会导致更快地检索文档和更快地响应? 问题答案: 查询和过滤器之间的主要区别在于评分。查询将返回每个文档具有相对排名得分的文档。过滤器没有。这种差异使过滤器更快,有两个原因。首先,它不会产生

  • 我尝试用JPA连接两个表 第一个表与实体ReportTripSing相关联第二个表与实体TripData相关联第二个表的主键用复合键(实体TripDataPK)描述 如您所见,我想将ReportTripSingle与TripData结合起来 它不起作用:( 这是堆栈跟踪: 原因:组织。冬眠AnnotationException:com的referencedColumnNames(FTP\U ID)

  • 使用Spark连接器通过分区键查询cassandra的理想方法是什么。我使用传入键,但这导致cassandra在引擎盖下添加,从而导致超时。 当前设置: 这里是分区(不是主)键,我有一个复合主键,只使用分区键进行查询 更新:是的,我得到了一个异常: