Java Trident Storm Cassandra,用多个主键写入表
我正在学习如何在Cassandra 2.0.5和Storm版本0.9.0.1中使用Storm的三叉戟。我还使用com.hmsonline storm cassandra 0.4.0-rc4 contrib 我的目标只是将一些文本行插入到具有id(int)、name(text)和句子(text)列的表中。id和name是主键Java Trident Storm Cassandra,用多个主键写入表,java,nosql,cassandra,apache-storm,trident,Java,Nosql,Cassandra,Apache Storm,Trident,我正在学习如何在Cassandra 2.0.5和Storm版本0.9.0.1中使用Storm的三叉戟。我还使用com.hmsonline storm cassandra 0.4.0-rc4 contrib 我的目标只是将一些文本行插入到具有id(int)、name(text)和句子(text)列的表中。id和name是主键 partitionPersist需要一个StateUpdater,为此我使用了com.hmsonline.storm.cassandra.trident.CassandraU
partitionPersist
需要一个StateUpdater
,为此我使用了com.hmsonline.storm.cassandra.trident.CassandraUpdater
。
但从它看起来只有一个键作为输入,而不是两个键(我需要id和名称)。
元组映射器(TridentTupleMapper
)也使用一个键:
TridentTupleMapper<K, C, V> tupleMapper
TridentTupleMapper tupleMapper
也许我遗漏了一些东西,但我如何将多个列定义为键呢?让我向您指出Brian和我一直致力于利用cassandra和storm的项目: 您可以查看几个示例,了解如何开发适合键/列映射的CqlTupleMapper。代码仍在开发中,但CQL3有一个合适的支持映射实现,它可以用于持久化聚合以及存储分区持久化 根据您的需要,您需要定义一个trident拓扑,该拓扑通过以下方法对传入数据(句子)进行分组:
inputStream.groupBy(new Field("sentences"))
然后,您将实现一个CqlTupleMapper——特别是映射(K key,V value),该映射将具有一个自定义CQL insert语句,该语句将键映射到其传递的值。您的查询类似于:
@Override
public Statement map(List<String> keys, String value) {
Insert statement = QueryBuilder.insertInto(KEYSPACE_NAME, TABLE_NAME);
statement.value("id", keys.get(0));
statement.value("name", keys.get(1));
statement.value("sentence", value);
return statement;
}
@覆盖
公共语句映射(列表键、字符串值){
Insert语句=QueryBuilder.insertInto(键空间名称、表名称);
语句.value(“id”,key.get(0));
语句.value(“name”,key.get(1));
声明。价值(“句子”,价值);
返回语句;
}
我希望这有帮助 谢谢,这个例子真的很有帮助!