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的主要内容,如果未能解决你的问题,请参考以下文章
Spark Cassandra 连接器找不到 java.time.LocalDate
Spark Cassandra 连接器 - perPartitionLimit
Spark Cassandra 连接器 - where 子句
RDD 不可序列化 Cassandra/Spark 连接器 java API
Spark Cassandra 连接器:SQLContext.read + SQLContext.write 与手动解析和插入(JSON -> Cassandra)