我想将大量数据从 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,并使用 saveToCassandra
和 WriteConf
...
2020 年 9 月更新:在 Spark Cassandra Connector 2.5.0 中添加了对数据帧中 writetime 和 ttl 的支持
关于apache-spark - 从具有不同 TTL 的 Spark 在 Cassandra 上批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866822/