【问题标题】:How to insert (not save or update) RDD into Cassandra?如何将 RDD 插入(不保存或更新)到 Cassandra?
【发布时间】:2016-12-15 13:06:19
【问题描述】:
我正在使用 Apache Spark 和 Cassandra,我想使用 spark-cassandra-connector 将我的 RDD 保存到 Cassandra。
代码如下:
def saveToCassandra(step: RDD[(String, String, Date, Int, Int)]) = {
step.saveToCassandra("keyspace", "table")
}
这在大多数情况下都可以正常工作,但会覆盖数据库中已经存在的数据。我不想覆盖任何数据。有可能吗?
【问题讨论】:
标签:
cassandra
apache-spark
【解决方案1】:
我要做的是:
rdd.foreachPartition(x => connector.WithSessionDo(session => {
someUpdater.UpdateEntries(x, session)
// or
x.foreach(y => someUpdater.UpdateEntry(y, session))
}))
上面的connector是CassandraConnector(sparkConf)。
它不如简单的saveToCassandra 好,但它允许细粒度的控制。
【解决方案2】:
我认为最好在 foreach 分区之外使用 WithSessionDo。该调用涉及不需要重复的开销。