InvalidRequestException(为什么:empid 如果包含 Equal,则不能被多个关系限制)

2024-05-19

这是关于我从 Apache Spark 查询 Cassandra 时遇到的问题。

Spark 的正常查询工作正常,没有任何问题,但是当我使用关键条件进行查询时,出现以下错误。 最初,我尝试查询复合键列族,它也给出了与下面相同的问题。

“由以下原因引起:InvalidRequestException(为什么:empid 如果包含 Equal,则不能被多个关系限制)”

列族:

CREATE TABLE emp (
empID int,
deptID int,
first_name varchar,
last_name varchar,
PRIMARY KEY (empID));

列族内容:

empID, deptID, first_name, last_name

104, 15, 'jane', 'smith'

SCALA 代码示例:

val job=new Job()
job.setInputFormatClass(classOf[CqlPagingInputFormat])
val host: String = "localhost"
val port: String = "9160"
ConfigHelper.setInputInitialAddress(job.getConfiguration(), host)
ConfigHelper.setInputRpcPort(job.getConfiguration(), port)
ConfigHelper.setInputColumnFamily(job.getConfiguration(), "demodb", "emp")
ConfigHelper.setInputPartitioner(job.getConfiguration(), "Murmur3Partitioner")
CqlConfigHelper.setInputColumns(job.getConfiguration(), "empid,deptid,first_name,last_name")
//CqlConfigHelper.setInputCQLPageRowSize(job.getConfiguration(), limit.toString)
CqlConfigHelper.setInputWhereClauses(job.getConfiguration(),"empid='104'")

// Make a new Hadoop RDD
val casRdd = sc.newAPIHadoopRDD(job.getConfiguration(),
                                classOf[CqlPagingInputFormat],
                                classOf[Map[String, ByteBuffer]],
                                classOf[Map[String, ByteBuffer]])

我恳请您告诉我是否有针对这种情况的解决方法,因为过去几天我一直在努力克服这个问题。

Thanks


此错误是由于 Cassandra 中查询的翻译方式造成的(检查org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader#whereClause了解详情)。当查询转换为 Cassandra 时,它具有以下语法:

SELECT * FROM "emp" WHERE token("empid") > ? AND 标记(“empid”)

有一个相关的JIRA(卡桑德拉-6151 https://issues.apache.org/jira/browse/CASSANDRA-6151)标记为“无法修复”,讨论解决问题的一些方法。从小事做起文档 http://www.datastax.com/dev/blog/cql3-table-support-in-hadoop-pig-and-hive我已经发现,CqlConfigHelper.setInputWhereClauses只能用于不属于键的索引列。

我希望它有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

InvalidRequestException(为什么:empid 如果包含 Equal,则不能被多个关系限制) 的相关文章

随机推荐