Apache spark 使用不同TTL的Spark在Cassandra上插入质量块
我想把Spark的大量数据插入Cassandra。数据有一个确定ttl的时间戳列。但是,每行的情况不同。我的问题是,在从Spark批量插入数据时,如何处理ttl 我当前的实现-Apache spark 使用不同TTL的Spark在Cassandra上插入质量块,apache-spark,cassandra,spark-cassandra-connector,ttl,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" ->
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
这里的原始数据有大约一百万条记录,每条记录产生不同的ttl。那么,有没有一种方法可以进行大容量插入,并从原始数据中的一列指定ttl呢
谢谢。这是通过使用
TTLOption.perRow
选项设置writecf
参数来支持的。以下是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月更新:在中添加了对数据帧中writetime和ttl的支持。您能解释更多吗?如何使用timestamp列作为ttl?有一个expr_dt列,我可以从中计算ttl。(ttl=expr_dt-当前时间戳)。所以,我可以将ttl作为我的输入列之一。我们有Java中的等效代码吗?我尝试过搜索,但我只看到了scala的方法。没有,但它应该很容易翻译。如何将cassandra连接配置添加到此配置的一部分?例如,当您创建spark上下文时,Thankscassandra连接配置在另一个地方定义