从具有不同 TTL 的 Spark 在 Cassandra 上批量插入

Mass insert on Cassandra from Spark with different 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

谢谢。

这通过使用 TTLOption.perRow 选项设置 WriteConf 参数来支持。 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...

2020 年 9 月更新:在 Spark Cassandra Connector 2.5.0

中添加了对数据帧中 writetime 和 ttl 的支持