使用主键从Cassandra中选择Spark

时间:2016-05-27 15:54:57

标签: apache-spark cassandra spark-cassandra-connector

我使用Spark-Cassandra连接器从Cassandra读取数据。我在C *中有下一张桌子:

CREATE TABLE my_table (key uuid PRIMARY KEY, value text);

我希望按键列表获取my_table条记录列表。我写了下一段代码:

sc.cassandraTable("my_keyspace", "my_table")
   .select("value") 
   .where("key in ?", listOfKeys).collect()

在日志中,我看到了下一个信息:

  

引起:java.io.IOException:准备SELECT期间出现异常   "值"来自" my_keyspace"。" my_table"令牌("键")> ?和   令牌("键")< =?和键入?允许过滤:关键不能   如果包含IN

,则受多个关系的限制

我在C * JIRA https://issues.apache.org/jira/browse/CASSANDRA-6151

中找到了下一个报告错误并且未获得修复状态的错误

如何通过主键使用spark-cassandra连接器从C *读取数据?

Cassandra v.2.1.9 Spark v.1.6.1

1 个答案:

答案 0 :(得分:1)

我认为你可以为此目的使用joinWithCassandraTable方法。

这样的事情:

val keys = sc.parallelize(listOfKeys)
val rowsRDD = keys.map(Tuple1(_))
    .repartitionByCassandraReplica("my_keyspace","my_table")
    .joinWithCassandraTable("my_keyspace","my_table")

您可以在连接器文档there中找到有关从C *读取的更多信息。

请记住,通常不建议在here中使用WHERE子句中的IN。