Join 群集键上的Spark Cassandra连接器连接

Join 群集键上的Spark Cassandra连接器连接,join,apache-spark,cassandra,spark-cassandra-connector,Join,Apache Spark,Cassandra,Spark Cassandra Connector,我想用我在卡桑德拉的一小部分数据来做一个有火花的工作。 我手头有一个RDD键(分区和集群列),我只想在这些键上运行我的作业 type CassandraKey = (String, String, String, String) val columns = SomeColumns(ColumnName("pkey1"),ColumnName("pkey2"),ColumnName("pkey3"),ColumnName("ckey1")) val repartitionedKeys: Cassa

我想用我在卡桑德拉的一小部分数据来做一个有火花的工作。 我手头有一个RDD键(分区和集群列),我只想在这些键上运行我的作业

type CassandraKey = (String, String, String, String)
val columns = SomeColumns(ColumnName("pkey1"),ColumnName("pkey2"),ColumnName("pkey3"),ColumnName("ckey1"))
val repartitionedKeys: CassandraPartitionedRDD[CassandraKey] = keys.repartitionByCassandraReplica("keyspace", "table", partitionKeyMapper = columns)
val selectedRows: CassandraJoinRDD[CassandraKey, CassandraRow] =
    repartitionedKeys.joinWithCassandraTable[CassandraRow](keyspace, table).on(joinColumns = columns)
selectedRows.collect()
我在BoundStatementBuilder上收到以下错误:19

java.lang.IllegalArgumentException: ckey1 is not a column defined in this metadata
我的表架构如下所示:

CREATE TABLE "keyspace".table (
pkey1 text,
pkey2 text,
pkey3 text,
ckey1 text,
ckey2 text,
ckey3 timestamp,
data text,
PRIMARY KEY (( pkey1, pkey2, pkey3 ), ckey1, ckey2, ckey3)
) 
查看代码,我可以看到BoundStatementBuilder的列类型是从ReplicaLocator.keyByReplicas启动的虚拟查询中解析出来的。此查询用于从表中检索分区令牌,其构造的where子句仅针对分区键

此外,我可以在RDDFunction.repartitionByCassandraReplica:183中看到,给定的分区键映射器被忽略,但这似乎不会引起任何问题


我使用的是连接器版本1.5.1

“重新分区”部分只能在分区键上,因此不要在那里指定列,或者如果您只选择了分区键列。仅使用
joinWithCassandraTable
调用指定所有连接列。

仅在RDD操作中出现的神秘错误消息。。。。可以在方法调用时抛出。Spark是惰性的,模式直到运行时才知道,即当调用操作时,但使用的虚拟查询可以在方法调用时执行。是的,但在当前代码中执行rdd之前,不会实际联系Cassandra节点