В Java Spark у меня есть фрейм данных со столбцом bucket_timestamp, который представляет время сегмента, к которому относится строка.
Я хочу записать кадр данных в БД Cassandra. Данные должны быть записаны в БД с TTL. TTL должен зависеть от временной метки сегмента - где TTL каждой строки должен быть рассчитан как ROW_TTL = CONST_TTL - (CurrentTime - bucket_timestamp)
, где CONST_TTL
- это постоянный TTL, который я настроил.
В настоящее время я пишу Кассандре с искрой, используя постоянный TTL, со следующим кодом:
df.write().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "key_space_name");
put("table, "table_name");
put("spark.cassandra.output.ttl, Long.toString(CONST_TTL)); // Should be depended on bucket_timestamp column
}
}).mode(SaveMode.Overwrite).save();
Один из возможных способов, о которых я думал, - для каждого возможного bucket_timestamp - фильтровать данные в соответствии с временной меткой, вычислять TTL и записывать отфильтрованные данные в Cassandra. но это кажется очень неэффективным и не искорки. Есть ли способ в Java Spark предоставить столбец спарк в качестве параметра TTL, так что TTL будет отличаться для каждой строки?
Решение должно работать с Java и набором данных : я столкнулся с некоторыми решениями для выполнения этого с RDD в scala, но не нашел решения для использования Java и dataframe.
Спасибо!