[英]Trident Storm-Cassandra, writing to a table with multiple primary keys
我正在學習如何在Cassandra 2.0.5和Storm版本0.9.0.1中使用Storm's Trident。 我也在使用com.hmsonline storm-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一起從事的項目,該項目利用了帶有風暴的卡桑德拉: https : //github.com/hmsonline/storm-cassandra-cql
您可以查看幾個示例,以了解如何開發適合您的鍵/列映射的CqlTupleMapper。 該代碼仍在開發中,但是對於CQL3有合適的支持映射實現,該實現可用於持久聚合以及僅存儲分區持久性。
為了滿足您的需要,您需要定義一個三叉戟拓撲,該拓撲通過以下方法對傳入數據(句子)進行分組:
inputStream.groupBy(new Field("sentences"))
然后,您將實現CqlTupleMapper-特別是map(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;
}
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.