Spark Cassandra 连接器 - perPartitionLimit

Posted

技术标签:

【中文标题】Spark Cassandra 连接器 - perPartitionLimit【英文标题】:Spark Cassandra Connector - perPartitionLimit 【发布时间】:2016-10-21 14:18:59 【问题描述】:

spark cassandra连接器中是否有办法实现侧边过滤,相当于cql中的每个分区限制perPartitionLimit在本机 cassandra java 驱动程序中?

注意这里是每个 cassandra 分区的限制而不是每个 spark 分区(连接器中现有的限制功能支持)。

spark 2.0.1,连接器 - 2.0.0-M3

【问题讨论】:

【参考方案1】:

感谢 RussS 的初步答复。我使用以下方法让它工作:

首先,我们需要使用“PER PARTITION LIMIT”。

其次,如果你还有其他的where子句,这个需要和其中一个结合起来,如下:

sc.cassandraTable(...).where("event_type = 1 PER PARTITION LIMIT 5")

而不是

sc.cassandraTable(...).where("event_type = 1).where("PER PARTITION LIMIT 5")

否则会在“PER PARTITION LIMIT”之前生成一个AND关键字,这会导致错误。

【讨论】:

【参考方案2】:

Spark Cassandra 连接器内置限制 API(截至 2.0.0-M3)只能通过 C* 令牌范围进行限制。

如果您使用高于 3.6 的 Cassandra,您可以在 .where API 中手动添加每个分区的限制。

见https://issues.apache.org/jira/browse/CASSANDRA-7017

sc.cassandraTable(...).where("PER PARTITION LIMIT 10") 

【讨论】:

感谢您的快速回答。但是当在 where api 中指定时,关键字 STATICLIMIT 被视为列名,因此会出错。原因:java.io.IOException: SELECT ... FROM ... WHERE token("src") > 准备期间出现异常?和令牌(“src”) 啊抱歉没有看那张票的结尾。每个分区限制

以上是关于Spark Cassandra 连接器 - perPartitionLimit的主要内容,如果未能解决你的问题,请参考以下文章

如何用Cassandra连接火花

Spark Cassandra 连接器找不到 java.time.LocalDate

Spark Cassandra 连接器 - perPartitionLimit

Spark Cassandra 连接器 - where 子句

RDD 不可序列化 Cassandra/Spark 连接器 java API

Spark Cassandra 连接器:SQLContext.read + SQLContext.write 与手动解析和插入(JSON -> Cassandra)