我想将旧的Cassandra集群迁移到新的集群。
要求: -
我有一个10个节点的cassandra集群,我要迁移的表是~100GB。我使用spark来迁移数据。我的火花群有10个节点,每个节点有大约16GB的内存。 在表中我们有一些垃圾数据,我不想迁移到新表。例如: - 让我们说我不想传输cid = 1234的行。那么,使用spark工作迁移它的最佳方法是什么?我无法直接对cassandraRdd进行过滤,因为cid不是分区键中包含的唯一列。
Cassandra表: -
test_table (
cid text,
uid text,
key text,
value map<text, timestamp>,
PRIMARY KEY ((cid, uid), key)
)
示例数据: -
cid | uid | key | value
------+--------------------+-----------+-------------------------------------------------------------------------
1234 | 899800070709709707 | testkey1 | {'8888': '2017-10-22 03:26:09+0000'}
6543 | 097079707970709770 | testkey2 | {'9999': '2017-10-20 11:08:45+0000', '1111': '2017-10-20 15:31:46+0000'}
我在想下面的事情。但我想这不是最有效的方法。
val filteredRdd = rdd.filter { row => row.getString("cid") != "1234" }
filteredRdd.saveToCassandra(KEYSPACE_NAME,NEW_TABLE_NAME)
这里最好的方法是什么?
答案 0 :(得分:1)
这种方法非常好。您可能希望在DataFrame中编写它以利用行编码,但这可能只会带来一些好处。这项行动的关键瓶颈是写作和阅读Cassandra。
DF示例--add-exports=javafx.graphics/com.sun.javafx.css=ALL-UNNAMED