如何将(不保存或更新)RDD插入(不保存或更新)到Cassandra?

时间:2014-12-19 14:55:39

标签: cassandra apache-spark

我正在使用Apache SparkCassandra,我希望用spark-cassandra-connector将我的RDD保存到Cassandra。

以下是代码:

def saveToCassandra(step: RDD[(String, String, Date, Int, Int)]) = {
  step.saveToCassandra("keyspace", "table")
}

大部分时间都可以正常工作,但会覆盖数据库中已存在的数据。我不想覆盖任何数据。它有可能吗?

2 个答案:

答案 0 :(得分:4)

我的工作是:

rdd.foreachPartition(x => connector.WithSessionDo(session => {
  someUpdater.UpdateEntries(x, session)
  // or
  x.foreach(y => someUpdater.UpdateEntry(y, session))
}))

上面的connectorCassandraConnector(sparkConf)

它不如简单的saveToCassandra那么好,但它允许细粒度的控制。

答案 1 :(得分:1)

我认为在foreach分区之外使用WithSessionDo会更好。该呼叫涉及的开销不需要重复。