回顧:關於pyspark RDD的一些理解

寫在前面

之前用DF數據類型比較多,RDD相對使用的比較少,回頭再看只想說too simple too young。

Transformation 和Action

Transformation轉換,對rdd而言,每次轉換都會產生新的rdd。
Transformation得到的rdd是惰性求值的,整個轉換過程只記錄了轉換的軌跡,並不是真正的計算,只有遇到Action操作時纔會真正計算。
Action:代表的是一個具體的行爲,返回的值非RDD類型,可以一個object,或者是一個數值,也可以爲Unit代表無返回值,並且action會立即觸發job的執行。
常見的操作類型

Transformation操作 Action操作
map reduce
flatmap collect
reduceByKey count
groupByKey first
union take
join takeSample
cogroup SaveAsTextFile
sample SaveAsAequenceFile
cartesian countByKey
sortBykey foreach

Transformaton函數

  • map(func,preservesPartitioning=False)
    將原來RDD的每個數據通過map中的用戶自定義函數func映射成一個新的元素。返回一個RDD。

  • filter(func)
    選出所有func返回值爲true的元素,最爲一個新的RDD返回

  • mapreduce

  • flatmap(func, preservesPartitioning=False)
    與map類似,但返回的是所有rdd映射函數func之後的序列集

  • sample(withReplacement, fraction, seed=None)
    withReplacement=true 表示有放回抽樣
    fraction爲抽樣的概率【0,1】
    raction=0.2並不是說明要抽出100個數字中20%的數據作爲樣本,而是每個數字被抽取爲樣本的概率爲0.2,這些數字被認爲來自同一總體,樣本的大小並不是固定的,而是服從二項分佈
    seed爲隨機數種子
    返回的是RDD的抽樣子集

  • distinct(numPartitions=None)
    返回去重之後的RDD

Action函數

  • collect()\color{red}{collect()}
    RDD的所有元素以列表的形式返回
    一般在filter或者\color{red}{足夠小}的時候用
    Driver\color{red}{因爲結果將返回到Driver程序所在節點}

  • count()
    返回RDD元素的個數

  • foreach(func)
    RDD的每個元素調用func,不返回RDD或者list

  • reduce(func)

  • first()
    返回數據集中的第一個元素

  • take(num)
    nactionnodedriver使\color{red}{以數組的形式返回數據集中前n個元素,需要注意的是這一action並不是在多個node上並行執行的,而是在driver程序所在的機器上單機執行,會增大內存的壓力,使用時需謹慎}
    -countBykey()
    master\color{red} 計算每個元素的個數,以字典的形式返回到master

spark RDD官方文檔

map 和 flatMap的區別

map(f, preservesPartitioning=False)[source]
Return a new RDD by applying a function to each element of this RDD.

flatMap(f, preservesPartitioning=False)[source]
Return a new RDD by first applying a function to all elements of this RDD, and then flattening the results.

flaMap 是先map再扁平化
即將所有對象合併爲一個對象
eg:

 a=lines.map(lambda x:x.split(" "))
    print(a.collect())
    b=lines.flatMap(lambda x:x.split(' '))
    print(b.collect())

res:
在這裏插入圖片描述

*ByKey 操作

操作
sortByKey
reduceByKey
reduceByKeyLocally
sampleByKey
subtractByKey
aggregateByKey
combineByKey
countByKey
foldByKey
groupBykey

具體參考spark *ByKey操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章