【问题标题】:Mass insert on Cassandra from Spark with different TTL来自 Spark 的 Cassandra 大规模插入,具有不同的 TTL
【发布时间】:2018-11-24 18:46:40
【问题描述】:

我想将大量数据从 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。

谢谢。

【问题讨论】:

  • 你能解释更多吗?您将如何使用时间戳列作为 ttl?
  • 有一个 expr_dt 列,我可以从中计算 ttl。 (ttl = expr_dt - 当前时间戳)。所以,我可以将 ttl 作为我的输入列之一。

标签: apache-spark cassandra spark-cassandra-connector ttl


【解决方案1】:

这可以通过使用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 的支持

【讨论】:

  • 我们在 Java 中有没有等价的代码?我尝试搜索,但我只看到 scala 方法可以做到这一点。
  • 没有,但应该很容易翻译
  • 如何将 cassandra 连接配置添加到此配置中?谢谢
  • cassandra 连接配置是在另一个地方定义的,例如当你创建 spark 上下文时
猜你喜欢
  • 2018-12-10
  • 2018-06-08
  • 2020-05-25
  • 1970-01-01
  • 2015-01-06
  • 2018-03-11
  • 2014-01-13
  • 2014-11-06
  • 2016-12-09
相关资源
最近更新 更多