如何在 Apache ignite 中缓存 Dataframe

How to cache Dataframe in Apache ignite

我正在编写代码以使用 spark SQLContext JDBC 连接来缓存 RDBMS 数据。创建 Dataframe 后,我想使用 apache ignite 缓存该 reusltset,从而使其他应用程序使用结果集。这是代码片段。

object test
{

  def main(args:Array[String])
  {

      val configuration = new Configuration()
      val config="src/main/scala/config.xml"

      val sparkConf = new SparkConf().setAppName("test").setMaster("local[*]")
      val sc=new SparkContext(sparkConf)
      val sqlContext = new org.apache.spark.sql.SQLContext(sc)
      val sql_dump1=sqlContext.read.format("jdbc").option("url", "jdbc URL").option("driver", "com.mysql.jdbc.Driver").option("dbtable", mysql_table_statement).option("user", "username").option("password", "pass").load()

      val ic = new IgniteContext[Integer, Integer](sc, config)

      val sharedrdd = ic.fromCache("hbase_metadata")

      //How to cache sql_dump1 dataframe

  }
}

现在的问题是如何缓存数据帧,IgniteRDD 有 savepairs 方法,但它接受键和值作为 RDD[Integer],但我有一个数据帧,即使我将它转换为 RDD,我也只会得到 RDD[排]。由 Integer 的 RDD 组成的 savepairs 方法似乎更具体如果我有一串 RDD 作为值怎么办?缓存数据帧或任何其他更好的方法来缓存结果集是否好。

没有理由将 DataFrame 存储在 Ignite 缓存(共享 RDD)中,因为您不会从中获益太多:至少您将无法执行 Ignite SQLDataFrame.

我建议执行以下操作:

  • 提供 CacheStore implementation for hbase_metadata cache that will preload all the data from your underlying database. Then you can preload all the data into the cache using Ignite.loadCache method. Here 您可能会找到有关如何使用 JDBC 持久存储以及 Ignite 缓存(共享 RDD)的示例

或者,您可以在执行操作时获取 sql_dump1,遍历每一行并使用 IgniteRDD.savePairs 方法将每一行单独存储在共享 RDD 中。完成此操作后,您可以使用上述相同的 Ignite Shared RDD SQL 查询数据。