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

标签 apache-spark cassandra spark-cassandra-connector 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 的支持

关于apache-spark - 从具有不同 TTL 的 Spark 在 Cassandra 上批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50866822/

相关文章:

apache-spark - 没有足够的副本可用于一致性 LOCAL_ONE 的查询(需要 1 个,但只有 0 个存活)

apache-spark - 在服务器上工作时如何打开 Spark UI?

database - 在 Cassandra 中使用计数器进行数据建模,过期列

java - Cassandra -赫克托 : Search by Row-Key but filter by further expression?

索引上的 Cassandra IN 子句

apache-spark - java.lang.NoClassDefFoundError : Could not initialize class org. xerial.snappy.Snappy

sqlite - 将 sqlite 文件加载到 DataFrame 中

apache-spark - 舍入数据框中的所有列 - 小数点后两位 pyspark

python - 将 pyspark 数据帧转换为标记点对象

scala - 将columnNames动态传递给cassandraTable().select()