用不同的TTL在Spark上用Cassandra进行质量插入

时间:2018-06-14 22:31:30

标签: apache-spark cassandra ttl

我想从Spark向Cassandra插入大量数据。数据有一个时间戳列,用于确定ttl。但是,每行都有所不同。我的问题是,如何从Spark中批量插入数据时处理ttl。

我目前的实施 -

    raw_data_final.write.format("org.apache.spark.sql.cassandra")
       .mode(SaveMode.Overwrite).options(Map("table" -> offerTable ,
       "keyspace" -> keySpace, "spark.cassandra.output.ttl" -> ttl_seconds)).save   

这里raw_data_final有大约一百万条记录,每条记录产生不同的ttl。那么,有没有办法进行批量插入,并以某种方式从raw_data中的列中指定ttl。

感谢。

1 个答案:

答案 0 :(得分:1)

使用WriteConf选项设置TTLOption.perRow参数可以支持此功能。 official documentation有以下RDD示例:

import com.datastax.spark.connector.writer._
...
rdd.saveToCassandra("test", "tab", writeConf = WriteConf(ttl = TTLOption.perRow("ttl")))

在您的情况下,您需要使用TTL替换"ttl"列的名称。

我不确定您是否可以直接在DataFrame上设置此项,但您始终可以从DataFrame获取RDD,并将saveToCassandraWriteConf一起使用...