2014-03-06 39 views
1

我有C *列族来存储类似事件的数据。在CQL3中以这种方式创建列列:Spark + Cassandra。具有集群顺序问题的复合键

CREATE TABLE event (
    hour text, 
    stamp timeuuid, 
    values map<text, text>, 
    PRIMARY KEY (hour, stamp) 
) WITH CLUSTERING ORDER BY (stamp DESC) 

分区程序是Murmur3分区程序。然后,我试图通过Calliope库来构建对该数据的Spark查询。在结果中,我收到两个问题:

  1. 在我的情况下,聚簇键('小时'字段)有超过1000条记录,但响应仅包含每个键的前1000条记录。我可以在查询中增加页面大小以接收更多数据,但据我所知,它必须是paginator的任务,才能查看数据并对其进行分片。
  2. 我收到每个记录不止一次。

关于第一个问题我从Calliope作者那里得到CQL3驱动程序必须分页数据的答案。他建议我阅读DataStax article。但是我无法找到答案如何使用正确的指令向驱动程序构建查询。

关于第二个问题我发现这是Cassandra中的Hadoop连接器的问题012.1.2.11。但是我使用C * 2.0.3并且用所需版本的库重新构建了Spark。我也使用Calliope 0.9.0-C2-EA版本。

您能否指点我的文档或代码示例来解释解决这些问题或演示解决方法的正确方法?我想我以不恰当的方式使用C * -to-Spark连接器,但我找不到解决方案。

预先感谢您。

+0

它似乎是“有集群秩序”条款是两个问题的来源。当我从类似的表中读取时(没有WITH CLUSTERING ORDER BY),结果的限制和重复都不会出现。 –

回答

0

现在不可能对集群密钥使用非默认排序。所有工作正常,然后群集键的排序顺序是默认(ACS)。

解决方法是修改数据模型以使用具有默认聚类顺序的复合键。