从表复制到表(更改主键)

时间:2016-01-07 11:21:07

标签: java apache-spark cassandra database-migration

上下文:

我需要更改我的primarey键的顺序

PRIMARY KEY (a, b) --> PRIMARY KEY (b,a)

但是在cassandra中,我不能像这样改变PRIMARY KEY:alter composite primary key in cassandra CQL 3.0

所以,我只是想将旧表中的数据移动到我创建的新表中。 由于行数很大,我需要使用Spark。

数据" in" :

我从旧表中得到这样的数据:

JavaRDD<CassandraRow> initialRDD;

问题:

我可以直接将其保存回新表,因为该行本身没有变化吗?

我设法做了什么:

我能做到这一点,但从CassandraRow映射到CassandraRow似乎很荒谬

javaFunctions(initialRDD).writerBuilder("targetKeyspace", "targetTable", mapToRow(CassandraRow.class)).saveToCassandra();
因此,它提示我一个错误:

Some primary key columns are missing in RDD or have not been selected: ...

1 个答案:

答案 0 :(得分:1)

我没有非常使用spark,但我认为您需要使用新的键顺序创建第二个表,然后使用spark连接器将第一个表加载到RDD中:

val rdd = sc.cassandraTable(&#34; keyspace&#34;,&#34; table1&#34;)

然后使用新的键顺序将其保存到第二个表:

rdd.saveToCassandra(&#34; keyspace&#34;,&#34; table2&#34;,SomeColumns(&#34; b&#34;,&#34; a&#34;))