gpt4 book ai didi

cassandra - Spark Cassandra 连接器 - where 子句

转载 作者:行者123 更新时间:2023-12-01 00:59:11 25 4
gpt4 key购买 nike

我正在尝试使用 spark 和 Datastax 发布的新连接器对存储在 cassandra 中的时间序列数据进行一些分析。

在我的架构中,分区键是仪表 ID,我只想在特定系列上运行 spark 操作,因此我需要按仪表 ID 进行过滤。

然后我想运行一个查询,如: Select * from timeseries where series_id = X

我试图通过这样做来实现这一目标:

JavaRDD<CassandraRow> rdd = sc.cassandraTable("test", "timeseries").select(columns).where("series_id = ?",ids).toJavaRDD();

执行此代码时,结果查询为:
SELECT "series_id", "timestamp", "value" FROM "timeseries" WHERE token("series_id") > 1059678427073559546 AND token("series_id") <= 1337476147328479245 AND series_id = ? ALLOW FILTERING

一个子句会自动添加到我的分区键 (token("series_id") > X AND token("series_id") <=Y) 上,然后在此之后附加我的。这显然不起作用,我收到一条错误消息:“如果包含 Equal,series_id 不能被多个关系限制”。

有没有办法摆脱自动添加的子句?我错过了什么吗?

提前致谢

最佳答案

驱动程序使用它从集群本身获取的表元数据自动确定分区键。然后它使用它来将 token 范围附加到您的 CQL,以便它可以从它尝试查询的特定节点读取大量数据。换句话说,Cassandra 认为 series_id 是您的分区键,而不是 meter_id。如果你在你的 table 上运行一个 describe 命令,我敢打赌你会感到惊讶。

关于cassandra - Spark Cassandra 连接器 - where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com