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 ...