Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Trident Storm Cassandra,用多个主键写入表_Java_Nosql_Cassandra_Apache Storm_Trident - Fatal编程技术网

Java Trident Storm Cassandra,用多个主键写入表

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

我正在学习如何在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.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));
声明。价值(“句子”,价值);
返回语句;
}

我希望这有帮助

谢谢,这个例子真的很有帮助!