繁体   English   中英

将值从 Spark Java 附加到 Cassandra Map 列

[英]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 1ABCb映射的新值作为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM