[英]Appending values to Cassandra Map column from Spark Java
我有 3 列的 cassandra 表。
id text,
value text,
mappings map<text,text>
假设样本数据如下:
id | value | mappings
-----------------------------------------------
1ABC | xyz | {"a":"abc","b":"bcd"}
在 Spark 作业中,我计算了 id 1ABC
的b
映射的新值作为 HashMap Ex: "b":"xyz"
(可以将映射转换为 JavaRDD)
如何使用 cassandra java spark 连接器将此值附加(覆盖)到表中? 我看着这对如何处理CQL集合追加的例子,但我似乎无法弄清楚如何在Java中做到这一点。
解决了这个问题如下。
通过传递新参数或使用来自 Spark 会话的相同参数来创建 cassandra 连接器。
import com.datastax.spark.connector.cql.CassandraConnector;
CassandraConnector connector = CassandraConnector.apply(spark.sparkContext().conf()); // or pass different values for spark.cassandra.connection.host, username and password
rdd.foreach(new VoidFunction<TestBean>() {
@Override
public void call(TestBean t) throws Exception {
final String id = t.getId();
final Map<String, String> mappings = t.getMappings();
boolean isUpdated = connector.withSessionDo(new AbstractFunction1<Session, Boolean>() {
@Override
public Boolean apply(Session v1) {
ResultSet updateResultSet = v1.execute(v1.prepare("update test set mappings = mappings + ? where id = ?")
.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
.bind(mappings, id));
return updateResultSet.wasApplied();
}
});
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.