自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一個Spark緩存的使用示例

大數(shù)據(jù) Spark
之前一直不是非常理解Spark的緩存應(yīng)該如何使用. 今天在使用的時候, 為了提高性能, 嘗試使用了一下Cache, 并收到了明顯的效果。關(guān)于Cache的一些理論介紹, 網(wǎng)上已經(jīng)很多了. 但是貌似也沒有一個簡單的例子說明。

之前一直不是非常理解Spark的緩存應(yīng)該如何使用. 今天在使用的時候, 為了提高性能, 嘗試使用了一下Cache, 并收到了明顯的效果。

關(guān)于Cache的一些理論介紹, 網(wǎng)上已經(jīng)很多了. 但是貌似也沒有一個簡單的例子說明。

注:因為使用的是內(nèi)部數(shù)據(jù)文件, 在這邊就不公布出來了. 大家看看測試代碼跟測試結(jié)果即可。

這次測試是在JupyterNotebook這種交互式的環(huán)境下測試的. 如果是直接的submit一個job, 可能結(jié)果不太一樣。

[[219983]]

測試步驟

初始化Spark

 

  1. from pyspark.sql import SparkSession  
  2. spark = SparkSession\  
  3. .builder\  
  4. .appName("Cache Demo")\  
  5. .master("spark://10.206.132.113:7077") \  
  6. .config('spark.driver.memory''5g') \  
  7. .config('spark.executor.memory''5g') \  
  8. .config("spark.cores.max", 20) \  
  9. .getOrCreate() 

分別讀兩個文件做測試, 并且其中一個使用Cache

 

  1. ds1 = spark.read.json(os.path.join(data_path, "data.2018-01-04"))  
  2. ds2 = spark.read.json(os.path.join(data_path, "data.2018-01-05"))  
  3. ds1.cache() # 對于***個dataframe進行cache. 

注: 這兩個數(shù)據(jù)文件分別是1月4日跟1月5日產(chǎn)生的. 大小非常接近, 都是3.1G.

為了防止Spark自己做了什么Cache影響實驗, 在這里讀取兩個不同的數(shù)據(jù)文件.

計算時間:

 

  1. import time  
  2. def calc_timing(ds, app_name) :  
  3. t1 = time.time()  
  4. related = ds.filter("app_name = '%s'" % app_name)  
  5. _1stRow = related.first()  
  6. t2 = time.time()  
  7. print "cost time:", t2 - t1 

測試結(jié)果:

 

  1. calc_timing(ds1, "DrUnzip") # cost time: 13.3130679131  
  2. calc_timing(ds2, "DrUnzip") # cost time: 18.0472488403  
  3. calc_timing(ds1, "DrUnzip") # cost time: 0.868658065796  
  4. calc_timing(ds2, "DrUnzip") # cost time: 15.8150720596 

可以看到:

  • 對于DS1, 雖然調(diào)用了Cache ,但是因為沒有真正的使用到, 所以***次進行filter操作還是很慢的
  • 第二次使用DS1的時候, 因為有了緩存, 速度快了很多
  • 相對的, DS2兩次執(zhí)行時間差別不大
  • 如果進到Spark UI 查看具體每個Job的執(zhí)行時間, 會發(fā)現(xiàn), 只讀取數(shù)據(jù)文件消耗的時間也就在15~20s.

因此可以猜想, Spark的DataFrame讀取數(shù)據(jù)之后, 即使進行兩個相同的操作, 消耗的時間也不能減少, 因為Spark 默認不會把DS放到內(nèi)存之中.

責(zé)任編輯:未麗燕 來源: 網(wǎng)絡(luò)大數(shù)據(jù)
相關(guān)推薦

2011-08-15 11:24:46

SQL Server事務(wù)

2019-11-07 14:00:36

MySQL數(shù)據(jù)庫SQL

2017-08-17 16:37:59

MySQL數(shù)據(jù)遷移

2021-02-22 17:17:38

Proxy緩存代碼

2022-08-18 20:02:04

JSLRU緩存

2012-02-01 14:12:55

iOS本地緩存機制

2022-02-22 11:12:38

2024-09-09 17:06:32

2018-01-02 10:36:29

Linux命令Cheat

2018-03-23 10:00:34

PythonTensorFlow神經(jīng)網(wǎng)絡(luò)

2013-09-11 16:02:00

Spark分布式計算系統(tǒng)

2024-04-09 09:56:52

多層緩存架構(gòu)Instagram

2018-05-28 08:54:45

SparkRDD Cache緩存

2015-01-20 13:46:31

Java EEDockerDocker部署

2025-03-03 07:00:00

2024-03-22 08:51:36

分庫分表項目

2012-04-19 17:42:46

Titanium布局

2016-09-26 17:26:20

2016-11-15 14:07:28

Apache SparLambdaHadoop

2019-08-01 08:36:51

緩存系統(tǒng)并發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號