Spark學習筆記 Spark基礎知識

2021-07-22 13:58:09 字數 2800 閱讀 2609

1、rdd表示分布在多個計算節點上的可以並行操作的元素集合,是spark主要的變成抽象。

spark streaming 是 spark 提供的對實時資料進行流式計算的元件

spark是乙個用於集群計算的通用計算框架,因此被應用於各種各樣的應用程式

2、從上層來看,每個saprk應用都有乙個驅動器程式(driver programmer)來發起集群上的各種並行操作。

驅動器程式通過乙個sparkcontext物件來訪問spark。這個物件代表對計算集群的乙個連線。在shell啟動時已經自動建立了乙個sparkcontext物件。

3、一旦有了sparkcontext,你就可以用它來建立rdd。

要執行這些操作,啟動器程式一般要管理多個執行器(executor)節點。

4、一旦完成了應用於spark的鏈結,接下來就是需要在你的程式中匯入spark包並建立sparkcontext。可以先通過sparkconf物件來配置你的應用,然後基於這個sparkconf建立乙個sparkcontext物件。

5、建立sparkconf的基本方法,傳遞兩個引數:

1、集群url:告訴spark如何連線到集群上。

2、應用名:當連線到乙個集群式,這個值可以幫助你在集群管理器的使用者介面中找到你的應用。

關閉spark:呼叫sparkcontext的stop()方法。或直接退出應用。(system.exit(0)/sys.exit())

6、在spark中,對資料的所有操作不外乎是:  建立rdd、 轉化已有的rdd、呼叫rdd操作進行求值

7、spark中的rdd是

乙個不可變的分布式物件集合。每個rdd都被分為多個分割槽,這些分割槽執行在集群中的不同節點上。

8、spark 提供了兩種建立rdd的方式:  讀取外部資料集、  在驅動器程式中對乙個集合進行並行化。  (反斜槓)

轉化操作返回的是rd, 行動操作返回的是其他資料型別。

9、當我們呼叫乙個新的行動操作時,整個rdd都會從頭開始計算。要避免這種行為,使用者可以將中間結果持久化。

10、不應該把rdd看做存放著特定資料的資料集,最好把每個rdd當做我們通過轉化操作構建出來的、記錄如何計算資料的指令列表。

11、spark的大部分轉化操作和一部分行動操作,都需要依賴使用者傳遞的函式來計算。

在python中,有三種方式把函式傳遞給spark:

1、傳遞比較短的函式時,可以使用lambda表示式來傳遞。

2、頂層函式

3、區域性函式

使用傳遞函式時,要小心的是:python會在你不經意間把函式所在的物件也序列化傳出去。當你傳遞的物件是某個物件的成員,或者包含了某個物件中乙個欄位的引用時,spark

就會將整個物件發到工作節點上。

12、常見的transformation和action操作

1、針對各個元素的轉化操作:

1.1 : map : 接收乙個函式,把這個函式用於rdd中的每乙個元素,將函式的返回結果作為結果rdd中對應的乙個元素=

1.2  : filter :  接收乙個函式,並將rdd中滿足該函式的元素放入新的rdd中返回。

1.3  : flatmap  : 每個輸入元素生成多個輸出元素。

2、偽集合操作 :

儘管rdd本身不是嚴格意義上的集合,但他也支援許多數學上的集合操作,比如合併和相交操作。

2.1  distinct : 生成乙個只包含不同元素的新rdd。需要注意:distinct() 操作的開銷很大,因為它需要將所有資料通過

網路進行混洗(shuffle),以確保每個元素只有乙份。

2.2  union :返回乙個包含兩個rdd中所有元素的rdd。 若輸入的rdd中有重複的資料,union操作也會包含這些重複的資料。

2.3  intersection : 只返回兩個rdd中都有的元素,intersecton()在執行時會去掉所有重複的元素(單個rdd內重複元素也會一起移除)。 需要通過

網路混洗來發現共有資料。

2.4  subtract  : 接受另乙個rdd作為引數,返回乙個由只存在在第乙個rdd而不存在第二個rdd中的所有元素組成的rdd。  需要

資料混洗。

2.5 cartesian : 返回所有可能的(a,b)對,其中a是源rdd中的元素,b是另乙個rdd中的元素。

3、行動操作(action)

3.1  reduce : 

3.2  fold : 

fold 和reduce 都要求函式的返回值型別需要跟我們所操作的rdd中的元素的型別相同。

3.3  aggregate : 

需要三個引數(

zerovalue

, seqop

, combop)  

zerovalue :返回型別的初始值,  seqop:     combop:

3.4 collect : 將整個rdd內容返回。collect()  要求所有資料都必須能一同放到單台機器的記憶體中。

3.5  take : 返回rdd 中的n個元素, 並且嘗試只訪問盡量少的分割槽,因此該慚怍會得到乙個不均衡的集合。 需要注意的是,這些操作返回元素的順序與你預期的可能不一樣。

3.6  top ; 從 rdd 中獲取前幾個元素。

3.7 foreach : 對rdd 中的每個元素進行操作,而不需要把rdd發回本地。

4、有些函式只能用於特定型別的rdd,比如mean()、 variance() 只能在數值rdd上,而join()只能在鍵值對rdd上。

13、持久化(快取)

persist()

Spark學習筆記(一) spark簡介

spark是基於記憶體計算的大資料平行計算框架。09年誕生於加州大學伯克利分校amplab.spark是mapreduce的替代方案,相容hdfs hive等分布式儲存層,可融入hadoop的生態系統,以彌補mapreduce的不足。其主要優勢如下 中間結果輸出 可以將多stage的任務串聯或者並行...

spark 學習筆記

最近使用spark簡單的處理一些實際中的場景,感覺簡單實用,就記錄下來了。部門使用者業績表 1000w測試資料 使用者 部門 業績 資料載入 val context new sparkcontext conf var data context.textfile data.txt 場景1 求每個部門的...

spark學習筆記

1 缺省會寫成一堆小檔案,需要將其重新分割槽,直接指定幾個分割槽 spark.sql select row number over partition by depid order by salary rownum from emp repartition 2 write.parquet hdfs ...