我想从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。
感谢。
答案 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,并将saveToCassandra
与WriteConf
一起使用...