乙個Spark快取的使用示例

2021-08-16 07:53:12 字數 2149 閱讀 9972

之前一直不是非常理解spark的快取應該如何使用 今天在使用的時候, 為了提高效能, 嘗試使用了一下cache, 並收到了明顯的效果

之前一直不是非常理解

spark

的快取應該如何使用. 今天在使用的時候, 為了提高效能, 嘗試使用了一下cache, 並收到了明顯的效果.

關於cache的一些理論介紹, 網上已經很多了. 但是貌似也沒有乙個簡單的例子說明.

注:因為使用的是內部資料檔案, 在這邊就不公布出來了. 大家看看測試**跟測試結果即可.

這次測試是在jupyternotebook這種互動式的環境下測試的. 如果是直接的submit乙個job, 可能結果不太一樣.

測試步驟

初始化spark.

from 

pyspark

.sql 

import 

sparksession

spark

=sparksession\

.builder\

.("cache demo")\

.master

("spark:")\

.config

('spark.driver.memory'

,'5g')\

.config

('spark.executor.memory'

,'5g')\

.config

("spark.cores.max",20

)\ .

getorcreate()

分別讀兩個檔案做測試, 並且其中乙個使用cache

ds1=spark

.read

.json(os

.path

.join

(data_path

,"data.2018-01-04"))

ds2=spark

.read

.json(os

.path

.join

(data_path

,"data.2018-01-05"))

ds1.cache()

# 對於第乙個dataframe進行cache.

注: 這兩個資料檔案分別是1月4日跟1月5日產生的. 大小非常接近, 都是3.1g.

為了防止spark自己做了什麼cache影響實驗, 在這裡讀取兩個不同的資料檔案.

import 

time

def 

calc_timing(ds

,):

t1=time

.time()

related=ds

.filter(%

) _1strow

=related

.first()

t2=time

.time()

print

"cost time:",t2

-t1測試結果:

calc_timing

(ds1

,"drunzip"

)# cost time: 13.3130679131

calc_timing

(ds2

,"drunzip"

)# cost time: 18.0472488403

calc_timing

(ds1

,"drunzip"

)# cost time: 0.868658065796

calc_timing

(ds2

,"drunzip"

)# cost time: 15.8150720596

可以看到:

對於ds1, 雖然呼叫了cache ,但是因為沒有真正的使用到, 所以第一次進行filter操作還是很慢的

第二次使用ds1的時候, 因為有了快取, 速度快了很多

相對的, ds2兩次執行時間差別不大

如果進到spark ui 檢視具體每個job的執行時間, 會發現, 只讀取資料檔案消耗的時間也就在15~20s.

因此可以猜想, spark的dataframe讀取資料之後, 即使進行兩個相同的操作, 消耗的時間也不能減少, 因為spark 預設不會把ds放到記憶體之中.

xml的乙個示例

function.h cstring openfile cstring cstring getcontext cstring,int,int void str2array cstring struct xmlnode function.cpp include include include incl...

Flask Vue的乙個示例

這裡記錄下乙個flask vue的乙個示例 1.系統環境 python3.7 sqlite3資料庫,資料庫名稱 books.db 2.專案結構 title 測試 api books defbooks conn sqlite3.connect books.db conn.row factory sql...

NHibernate的乙個示例

一 建立poco實體 工廠表factoryentity,關聯企業表companyentiry,company id關聯t pm company表 企業表 manytoone name companyentity classtype typeof companyentity lazy laziness...