gpt4 book ai didi

java - Trident Storm-Cassandra,写入具有多个主键的表

转载 作者:行者123 更新时间:2023-11-30 04:02:26 25 4
gpt4 key购买 nike

我正在学习如何将 Storm 的三叉戟与 Cassandra 2.0.5、Storm 版本 0.9.0.1 一起使用。我还使用 com.hmsonlinestorm-cassandra 0.4.0-rc4 contrib。

我的目标只是将一些文本行插入到具有 id (int)、name (text) 和句子 (text) 列的表中。 id 和 name 是主键。

partitionPersist需要 StateUpdater ,为此我正在使用 com.hmsonline.storm.cassandra.trident.CassandraUpdater<K, C, V> 。但从看起来它只得到一个键作为输入,而不是两个(我需要 id 和 name)。元组映射器 ( TridentTupleMapper ) 也使用一个键:

TridentTupleMapper<K, C, V> tupleMapper

也许我遗漏了一些东西,但是如何将多个列定义为键?

最佳答案

让我向您介绍一下 Brian 和我一直在开发的使用 cassandra 和 Storm 的项目:https://github.com/hmsonline/storm-cassandra-cql

您可以查看几个示例,了解如何开发适合您的键/列映射的 CqlTupleMapper。代码仍在开发中,但 CQL3 有一个合适的支持映射实现,可用于持久化聚合以及仅存储分区持久化。

根据您的需求,您需要定义一个三叉戟拓扑,通过以下方法对传入数据(句子)进行分组:

inputStream.groupBy(new Field("sentences"))

然后,您将实现一个 CqlTupleMapper - 特别是映射(K 键,V 值),它将具有将键映射到其传递的值的自定义 CQL 插入语句。您的查询类似于:

@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;
}

我希望这会有所帮助。

关于java - Trident Storm-Cassandra,写入具有多个主键的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com