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的方法,
下圖是初始時的值:
使用下列指令啟動netcat server
然後輸入
将得到下圖的結果
然後再輸入world,
則将得到下列結果