2014-01-10 2 views
5

Dies ist in Bezug auf ein Problem, das ich bei der Abfrage von Cassandra von Apache Spark konfrontiert.InvalidRequestException (Warum: Empid kann nicht durch mehr als eine Beziehung eingeschränkt werden, wenn es eine Equal enthält)

Die normale Abfrage von Spark funktioniert ohne Probleme, aber wenn ich mit einer Bedingung abfragen, die der Schlüssel ist, bekomme ich den folgenden Fehler. Anfangs versuchte ich, nach einer zusammengesetzten Schlüsselspaltenfamilie zu fragen, und es gab auch das gleiche Problem wie unten.

"Verursacht durch: InvalidRequestException (warum: empid von mehr als einer Beziehung kann nicht eingeschränkt werden, wenn es einen Gleich enthält)"

Spalte Familie:

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

Säule:

empID, deptID, first_name, last_name 

104, 15, 'jane', 'smith' 

Beispiel SCALA Code:

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]]) 

Ich bitte Sie, lassen Sie mich wissen, wenn es irgendwelche Arbeit für diese Art von Szenario gibt, wie ich kämpfe, um dieses Problem in den letzten paar Tagen zu überwinden.

Dank

+1

Eigentlich bekomme ich dies mit dem neuesten CQL3-Devcenter von datastax. Tatsächlich führe ich die gleichen Abfragen aus, die vorher gearbeitet haben, und jetzt geben alle denselben Fehler an. Lass es mich wissen, wenn du es herausgefunden hast! – Adrian

Antwort

0

Dieser Fehler tritt auf den Weg durch die Abfrage in Cassandra (Check org.apache.cassandra.hadoop.cql3.CqlPagingRecordReader#whereClause für weitere Details) übersetzt wird. Wenn die Abfrage in Cassandra übersetzt wird, hat sie folgende Syntax:

SELECT * FROM "emp" WHERE-Token ("Empid")>? UND Token ("Empid") < =? UND empid = ‚104‘ LIMIT 1000 gestattet die Filtrierung

Es ist ein verwandtes JIRA (CASSANDRA-6151) Marke als nicht beheben, dass einige Ansätze diskutiert das Problem zu lösen. Von der kleinen documentation, die ich gefunden habe, sollte CqlConfigHelper.setInputWhereClauses nur für indizierte Spalten verwendet werden, die nicht Teil des Schlüssels sind.

Ich hoffe es hilft.

Verwandte Themen