天天看點

Spark修煉之道(進階篇)——Spark入門到精通:第十一節 Spark Streaming—— DStream Transformation操作

dstream transformation操作

transformation

meaning

map(func)

對dstream中的各個元素進行func函數操作,然後傳回一個新的dstream.

flatmap(func)

與map方法類似,隻不過各個輸入項可以被輸出為零個或多個輸出項

filter(func)

過濾出所有函數func傳回值為true的dstream元素并傳回一個新的dstream

repartition(numpartitions)

增加或減少dstream中的分區數,進而改變dstream的并行度

union(otherstream)

将源dstream和輸入參數為otherdstream的元素合并,并傳回一個新的dstream.

count()

通過對dstreaim中的各個rdd中的元素進行計數,然後傳回隻有一個元素的rdd構成的dstream

reduce(func)

對源dstream中的各個rdd中的元素利用func進行聚合操作,然後傳回隻有一個元素的rdd構成的新的dstream.

countbyvalue()

對于元素類型為k的dstream,傳回一個元素為(k,long)鍵值對形式的新的dstream,long對應的值為源dstream中各個rdd的key出現的次數

reducebykey(func, [numtasks])

利用func函數對源dstream中的key進行聚合操作,然後傳回新的(k,v)對構成的dstream

join(otherstream, [numtasks])

輸入為(k,v)、(k,w)類型的dstream,傳回一個新的(k,(v,w)類型的dstream

cogroup(otherstream, [numtasks])

輸入為(k,v)、(k,w)類型的dstream,傳回一個新的 (k, seq[v], seq[w]) 元組類型的dstream

transform(func)

通過rdd-to-rdd函數作用于源碼dstream中的各個rdd,可以是任意的rdd操作,進而傳回一個新的rdd

updatestatebykey(func)

根據于key的前置狀态和key的新值,對key進行更新,傳回一個新狀态的dstream

具體示例:

下面的代碼是運作時添加的檔案内容

下面是前面各個函數的結果

示例2:

上節課中示範的wordcount代碼并沒有隻是對輸入的單詞進行分開計數,沒有記錄前一次計數的狀态,如果想要連續地進行計數,則可以使用updatestatebykey方法來進行。下面的代碼主要給大家示範如何updatestatebykey的方法,

下圖是初始時的值:

Spark修煉之道(進階篇)——Spark入門到精通:第十一節 Spark Streaming—— DStream Transformation操作

使用下列指令啟動netcat server

然後輸入

将得到下圖的結果

Spark修煉之道(進階篇)——Spark入門到精通:第十一節 Spark Streaming—— DStream Transformation操作

然後再輸入world,

則将得到下列結果

Spark修煉之道(進階篇)——Spark入門到精通:第十一節 Spark Streaming—— DStream Transformation操作

繼續閱讀