2016-05-12 34 views
2

我正在編寫一個代碼來使用spark SQLContext JDBC連接來緩存RDBMS數據。一旦創建了Dataframe,我想用apache點燃來緩存reusltset,從而使其他應用程序能夠使用結果集。這是代碼片段。如何在Apache中緩存數據幀ignot

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 [整數],但我有一個數據幀,即使我將其轉換成RDD我只會越來越RDD [行]。由Integer的RDD組成的savepairs方法似乎更具體什麼如果我有一串RDD作爲值?緩存數據幀或其他更好的方法來緩存結果集是好事。

+0

嘿Vignesh,你有沒有得到任何其他解決方案呢?或者你只採取以下方法? – Kalpesh

回答

1

沒有理由將DataFrame存儲在Ignite緩存(共享RDD)中,因爲您不會從中受益太多:至少您無法在DataFrame上執行Ignite SQL

我建議做以下幾點:

  • 提供CacheStore實施hbase_metadata緩存將從基礎數據庫預加載的所有數據。然後,您可以使用Ignite.loadCache方法將所有數據預加載到緩存中。 Here你會發現關於如何使用JDBC的持久存儲在Ignite緩存(共享RDD)

或者你可以得到爲你做sql_dump1,遍歷每一行和使用IgniteRDD.savePairs方法單獨存儲每個行中的共享RDD。完成此操作後,您可以使用上面提到的相同的Ignite Shared RDD SQL來查詢數據。