【发布时间】:2017-07-27 04:36:12
【问题描述】:
以下是 cassandra 表架构:
创建表 my_table ( 年文, 月文本, 日文, 小时整数, 最小整数, 秒整数, 主键((年、月、日)、时、分、秒))
如果我使用 cassandra cql 运行以下查询,它可以工作:
SELECT * FROM my_table WHERE year ='2017' and month ='01' and day ='16' and (hour,min,sec) > (1,15,0) LIMIT 200
但是,当我使用 spark-cassandra 连接器运行相同的查询时,它不起作用:
sparkSession.read().format("org.apache.spark.sql.cassandra").options(map).load()
.where(year ='2017' and month ='01' and day ='16' and (hour,min,sec) >= (1,15,0)");
我在日志中收到以下异常:
> Exception in thread "main" org.apache.spark.sql.AnalysisException:
> cannot resolve '(struct(`hour`, `min`, `sec`) >= struct(1, 15, 0))'
> due to data type mismatch: differing types in '(struct(`hour`, `min`,
> `sec`) >= struct(1, 15, 0))' and (struct<hour:int,min:int,sec:int>
> struct<col1:int,col2:int,col3:int>).; line 1 pos 96
Spark-cassandra-connector 版本:2.0.0-M3
Spark 版本:2.0.0
非常感谢任何帮助
【问题讨论】:
-
你能像这样独立尝试吗
and hour >= 1 and min >= 15 and sec >=0,因为这对我的场景有用。 -
这在 cassandra cql 中也不起作用,因为小时、分钟和秒都是集群键的一部分。要在任何列聚类键上运行范围,前一列应与相等条件一起使用。即在 min 列上运行“> =”,小时只能包含等于(=)操作条件,否则会发生以下异常:com.datastax.driver.core.exceptions.InvalidQueryException:PRIMARY KEY 列“min”不能被限制(前面“小时”列受非 EQ 关系限制)
-
@AkashSethi:奇怪的是它在 Spark 中运行,但它没有给出预期的结果。因为问题中发布的查询将返回 01:15:00 之后一天的所有行。但在输出中,每小时的行将在第 15 分钟后开始
标签: apache-spark cassandra spark-cassandra-connector