Java Spark流数据帧持久化操作

Java Spark流数据帧持久化操作,java,database,scala,apache-spark,caching,Java,Database,Scala,Apache Spark,Caching,我从spark代码中读取Oracle数据库,并将其持久化(缓存操作) 代码结束时,我需要取消持久化此数据帧,因为它可能会在数据库中发生一些更改,我需要在下一个周期中使用这些数据,但同时时间成本对我来说非常重要。如果我缓存数据帧,我的代码将占用1秒以下的时间,如果我没有超过3秒(这是不可接受的)。是否有任何策略可以从数据库获取最新数据,同时将时间成本价值降至最低 使用Oracle数据的主要操作有: dataOracle.createOrReplaceTempView("TABLE&quo

我从spark代码中读取Oracle数据库,并将其持久化(缓存操作)

代码结束时,我需要取消持久化此数据帧,因为它可能会在数据库中发生一些更改,我需要在下一个周期中使用这些数据,但同时时间成本对我来说非常重要。如果我缓存数据帧,我的代码将占用1秒以下的时间,如果我没有超过3秒(这是不可接受的)。是否有任何策略可以从数据库获取最新数据,同时将时间成本价值降至最低

使用Oracle数据的主要操作有:

dataOracle.createOrReplaceTempView("TABLE")
val total = spark.sql(s"select count(*) from TABLE where name = ${name}").first().getLong(0)
val items = spark.sql(s"SELECT count(*) from TABLE where index = ${id} and name = ${name}").first().getLong(0)
val first_rule: Double = total.toDouble / items.toDouble

如果您的数据帧已更新,并且您需要这些更新,那么根据定义,您不能缓存任何内容,您只需要重新读取它。一种可能的优化方法是向数据库中的表中添加一列上次修改的时间戳,并仅读取上次修改的时间戳大于某个值的条目。

如果数据帧已更新,并且您需要这些更新,则根据定义,您无法缓存任何内容,只需重新读取即可。一种可能的优化方法是向数据库中的表中添加一列上次修改的时间戳,并且只读取上次修改的时间戳大于某个值的条目

dataOracle.createOrReplaceTempView("TABLE")
val total = spark.sql(s"select count(*) from TABLE where name = ${name}").first().getLong(0)
val items = spark.sql(s"SELECT count(*) from TABLE where index = ${id} and name = ${name}").first().getLong(0)
val first_rule: Double = total.toDouble / items.toDouble