從hive中讀取資料然后進行cache
var data = spark.sql("select * from a").cache
data.show 第一次
后面的計算中對a表進行了修改
這個時候的
data.show 第二次
和之前的是一樣的嗎?
因為目前做的感覺這個data雖然cache了,但是資料源變了,data又重新計算,第一次和第二次的結果不一樣,cache并沒有成功的樣子。這樣可以讓data保持不變,盡管資料源變了。
uj5u.com熱心網友回復:
大神幫忙,大神幫忙uj5u.com熱心網友回復:
一樣。資料已經讀取出來并cache到spark的記憶體里了,相當于在spark里打了個快照(或者叫副本)uj5u.com熱心網友回復:
其實我和樓上也是同樣的想法,但是在測驗中,發現如果原表變了后,得到的東西是不一樣了,感覺cache失效了uj5u.com熱心網友回復:
還有一個問題,也在這里順便問一下,sparkSQL的cache和rdd的cache是不是不一樣,因為現在看起來,好像sparksql的cache是先記憶體再磁盤,而rdd是只有記憶體uj5u.com熱心網友回復:
一樣的啊,不管是否有快取,都不會改變,RDD或者說DataFrme都是只讀的,只能從一個狀態轉換為另外一個狀態,他本身是不會改變的uj5u.com熱心網友回復:
是咯,兄弟,我也發現同一行程里面,spark sql修改了資料源表后,從這個資料源生成的RDD快取就失效了,都要重算。坑的很啊uj5u.com熱心網友回復:
spark 原理同關系資料庫類似, 他們這種做法是正解.1, spark sql 類似于 資料庫sql,
2, spark sql cache 相當于一個查詢快取, 或者叫查詢視圖, 有這個操作之后 就不需要每次去查資料.
3, 當資料庫資料發生變化, spark 把這個改變重繪到cache 要重新查詢,
4, 如果資料變化cache不變, 計算不就是用了臟資料? 計算結果不就是錯誤的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/20581.html
標籤:Spark
下一篇:交通狀態預測
