在Cassandra行中更新set类型的列

时间:2016-04-18 19:14:14

标签: scala apache-spark cassandra apache-spark-sql spark-cassandra-connector

我有一个RDD [PersonType] = [pid,cid,firstname,lastname,age,source,sourceType,message]值为RDD = [1000,100,Vikash,Singh,33,source,sourceType,message] < / p>

我将csaandra行设为[pid,cid,firstname,lastname,age,dept,mrids]这里设置了mrids。假设cassandra的值是[1000,100,vikash,singh,33,bank,{sourceold.sourceTypeold.messageold}

我想用旧值和新值更新cassandra列mrids。 所以我在cassandra的新更新值应为[1000,100,vikash,singh,33,bank,{sourceold.sourceTypeold.messageold,source.sourceType.message}

请告诉我如何更新mrids列。

val rdd[personType] = rdd1
val rdd2 = sc.cassandraTable(keyspace,tablename)
              .select("p_id","c_id", "mrids")

我应该在下一步写下什么代码来实现这个目标?

1 个答案:

答案 0 :(得分:0)

这应该让你开始。

它向您展示了如何基于密钥连接rdd,并将数据附加到另一个rdd的集合中。

val temp = List((1, 4, Set(1)),
                    (2, 5, Set(2)),
                    (3, 6, Set(3))
                    )
val temp2 = List((1, 11, 11),
                  (2, 11, 22),
                  (3, 11, 33)
                )
val temp_rdd = sc.parallelize(temp)

val temp2_rdd = sc.parallelize(temp2)

val test = temp_rdd.map{case(key, data, set)=>((key),(data, set))}
                        .join(temp2_rdd.map{case(key, data, set_new_value)=>((key),(data, set_new_value))})
                        .map{case(key, ((data1, set),(data2, set_new_value)))=>(key, set.toSet + set_new_value)}


test.collect().foreach(println)

最后,您可以使用rdd.saveToCassandra保存rdd结果集。