2016-02-24 22 views
3

我有一個實時填充Cassandra表的Spark Streaming進程。我想對該Cassandra表進行查詢,以訪問底層數據。在用Spark Streaming填充的Cassandra表上生成Spark

CQL在它的語法(僅限有條件的地方,沒有GROUP BY),所以我想用在它上面的星火SQL的相當有限。

但是,一旦我加載數據框,它不會看到底層數據的任何變化。如何不斷保持刷新數據幀,使他們始終看到數據更改?

Srdjan

回答

1

我知道這是一個較舊的帖子,但似乎這裏有一個反覆出現的主題。需要對已被攝入NoSQL存儲的數據進行全功能查詢,Spark SQL提供了實現這一功能的能力。需要考慮的事情之一

1>如果直接使用Spark連接器直接使用Spark連接器來處理數據存儲,即使使用謂詞下推,相關列也必須從Cassandra /其他NoSQL存儲中移入Spark,以便運行查詢。存在緩存因爲即席查詢保證下一個查詢需要一組不同的數據,這意味着再次重複該過程,並導致在火花過程流失已經移動到火花數據小點,並抑制性能

2>如果有人簡單地將數據存儲區中的所有數據加載到Spark中,則會出現上面提到的陳舊問題,因爲Spark是不可變的高速緩存。一種解決方案是在Spark中對數據設置TTL(生存時間),並且每隔一段時間從頭開始刪除和重新創建數據幀,這是浪費和低效的,並且不清楚在查詢時會發生什麼做

一個最好的品種溶液(SnappyData是一個我知道的),只是將dataframes成可變的實體,這樣的變化在的NoSQL數據存儲可以在星火被CDCed,您可以用星火SQL執行查詢,不留Spark羣集或必須將數據移動到每個查詢的Spark中。這具有顯着的性能優勢(可以以列格式存儲數據,可以修剪查詢,避免不必要的序列化成本,利用Spark中的代碼生成更快地運行查詢),降低整個系統的複雜性並允許您構建連續的應用程序與最新的數據一起工作。

相關問題