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

Spark和cassandra,聚类键的范围查询

邵博艺
2023-03-14

创建TABLE TABLE(int键、time时间戳、度量浮点、主键(key、time));

我需要创建一个火花作业,这将读取数据从上一个表,在指定的开始和结束时间戳做一些处理,并刷新结果回Cassandra。

因此,我的spark-cassandra-connector必须对集群cassandra表列进行范围查询。

sc.cassandraTable(keyspace,table).
as(caseClassObject).
filter(a => a.time.before(startTime) && a.time.after(endTime).....
sc.cassandraTable(keyspace, table).
where(s"time>$startTime and time<$endTime)......

范围查询的选择性约为1%,不可能在查询中包含分区键。

这两种解决方案哪一种更好?

共有1个答案

尉迟景福
2023-03-14
sc.cassandraTable(keyspace, table).where(s"time>$startTime and time<$endTime)

会快得多。在第一个命令中,您基本上是在执行一个百分比(如果只提取5%的数据,则为总工作量的5%)的全部抓取,以获得相同的数据。

在第一种情况下,你是

  1. 从Cassandra读取所有数据。
  2. 序列化每个对象,然后将其移动到Spark。
  3. 最后过滤所有内容。
    null
sc.cassandraTable[CaseClassObject](keyspace, table)
 类似资料:
  • 我有一个表格,记录在我的网站上执行的用户活动。我的桌子结构看起来像: 现在我想取过去5分钟内收到的所有记录。 为了做同样的事情,我正在使用 但是这个查询没有返回任何结果

  • 我们大量使用cassandra wide rows来存储每个用户的时间序列,因为它们非常适合那个用例。假设我们有一个表: 如果时间戳上的冲突可能发生(相同的用户可以用相同的时间戳发出两个不同的事件)。假设我们对所有事件都有一个顺序(每个事件都有一个序列int),那么调整这个模式来解决这个问题的最佳方法是什么。 我将无法执行-cassandra不允许这样做。

  • 因此,我尝试使用Spark SQL进行以下查询('timestamp'是分区键): 虽然作业产生200个任务,但查询不会返回任何数据。 另外,我可以保证会返回数据,因为在cqlsh上运行查询(使用'token'函数进行适当的转换)确实会返回数据。 但不幸的是我不知道什么是“过滤器”...

  • 我在使用AWS Boto3使用推荐的KeyConditionExpression同时使用哈希键和范围键查询DynamoDB时遇到问题。我附上了一个查询示例: 当我对具有以下方案的表运行此操作时: 我发现以下错误,我无法理解原因: 根据我的理解,类型M是映射或字典类型,我使用的类型N是数字类型,与我的范围键表方案相匹配。如果有人能解释为什么会发生这个错误,或者我也愿意用不同的方式完成相同的查询,即使

  • 问题内容: 如何在SQLite中高效地执行简单范围查询? 说,我有保存个人信息的数据,我想找到年龄在20到45岁之间,体重在50到80公斤之间的人? 我应该怎么做(例如设置某些索引?)以提高搜索效率? 问题答案: 我会尝试像 对“年龄”和“体重”字段建立索引将有助于加快查询速度。 这是有关在SQLite中建立索引的很好的概述:http : //www.tutorialspoint.com/sqli