【问题标题】:Spark Streaming Data-frame Persist OperationSpark Streaming 数据帧持久化操作
【发布时间】:2021-03-07 05:11:15
【问题描述】:

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

  val dataOracle = spark.read
  .format("jdbc")
  .option("url",conn_url)
  .option("dbtable", s"(select * from table)")
  .option("user", oracle_user)
  .option("password", oracle_pass)
  .option("driver",oracle_driver)
  .load().persist()

代码结束,我需要取消持久化这个数据框,因为它可能会在数据库中发生一些变化,我需要在下一个周期中使用这些数据,但同时成本对我来说非常重要。如果我缓存数据帧,我的代码将在 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

【问题讨论】:

    标签: java database scala apache-spark caching


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 2014-12-23
      • 1970-01-01
      • 2021-04-14
      • 2018-08-13
      • 1970-01-01
      • 2018-04-17
      • 2021-04-15
      相关资源
      最近更新 更多