2016-04-08 9 views
2

我們使用Spark Streaming使用createDirectStream從Kafka獲取數據。在創建sparkstreaming上下文後將RDMS數據緩存在spark中

在同一個程序中,我連接到MYSQL以從數據庫獲取一些數據。現在我想用spark來緩存這個結果。

這裏的問題是我在開始時創建了一個Spark Streaming上下文,現在要緩存這個MYSQL數據,我不得不將它轉換爲只能在spark上下文的幫助下才能使用的RDD,不幸的是我無法創建火花上下文(因爲上下文已經根據火花流創建)。

我不想設置spark.driver.allowMultipleContexts = true以允許JVM使用多於spark的上下文,因爲這可能會導致問題。

有沒有辦法使用spark來緩存,或者我們如何將MYSQL的結果轉換爲RDD?

+0

這個問題的主題太寬泛,無法在這裏回答。試着看看Alluxio(ex.Tachyon) – eliasah

+0

Tachyon在那裏。我只是想知道是否有可能以某種方式創建RDD或使用streamingcontext來緩存它(如果無法創建RDD)。 –

+0

你總是可以使用jdbc格式的dataframe讀取api從mysql中獲取數據,然後你可以用.rdd將它轉換爲RDD [Row],並根據需要使用它 – eliasah

回答

1

這裏你根據你的問題的描述去。讓我們考慮一下,你正在發起爲遵循的StreamingContext:

val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount") 
val ssc = new StreamingContext(conf, Seconds(1)) 

您可以隨時從自己的流上下文獲取SparkContext如下:

val sc = ssc.sparkContext 

,然後實現它是什麼都你正在嘗試做的。它是您的流上下文的關聯Spark上下文,因此不需要爲此創建新的Spark上下文。

+1

忘記了streamingcontext在sparkcontext中。謝謝,我會盡力並接受你的回答。 –

+0

你的問題有點困惑我,以及:) – eliasah

+0

我認爲你試圖有2個孤立的環境 – eliasah

相關問題