閣下說(shuō)的應(yīng)該是集合類的流式處理,而不是文件流吧!
1.流式處理從思維的角度來(lái)說(shuō)那就是通暢,可以不需要思維阻塞地一直寫才去,有一種看爽文的感覺(jué),如果沒(méi)有流式處理,那么就需要不停地打斷思路遍歷集合進(jìn)行處理,代碼是又丑又很難看懂!
2.最喜歡流式處理的應(yīng)該是數(shù)據(jù)開(kāi)發(fā)類的程序員,很多數(shù)據(jù)的處理工作很復(fù)雜,分步驟,需要不同的處理邏輯,適用流式處理就可以把每一個(gè)步驟當(dāng)成流的一個(gè)操作節(jié)點(diǎn)處理,方便!
舉例:
1.如果寫過(guò)mapreduce的都知道,常規(guī)寫法可能需要寫一個(gè)循環(huán),超級(jí)復(fù)雜,如果使用流就可以寫成:(sparkstreaming舉例:)
# 統(tǒng)計(jì)詞頻counts = lines.map(lambda x:x.strip())\ #1.去除首位空格 .flatMap(lambda x: x.split(' '))\ #2.根據(jù)空格分出每一個(gè)詞 .filter(lambda x:x not in stop_words) \ #3.過(guò)濾掉停用詞 .map(lambda x: (x, 1)) \ #4.給每一個(gè)詞標(biāo)記1 .reduceByKey(add) #5.統(tǒng)計(jì)求和.sortBy(lambda x:-x[1]) # #排序通過(guò)一個(gè)流式的處理就簡(jiǎn)單完成了
1.java的一個(gè)數(shù)據(jù)處理流程舉例
List<Entity> entityList = xxxx;MapFrame<Object,Double> groups = ListFrame.fromList(entityList )
.handle("value=format(value,2)") //1.列表實(shí)體的value保留兩位小數(shù)
.handle(entity->entity.getName()==null,"name=''") //2.name為空變?yōu)?"
.handle(entity->entity.getValue()==null,"value=0","value=value+2") //3.value不為空+2
.handle("name=replace(name,'#','')") //4.替換#
.handle("percent=double(value)/"+sum) //5.計(jì)算百分比
.groupBy("name").sum("percent"); //6.分組統(tǒng)計(jì)
上面的過(guò)程在不寫for循環(huán)的條件下就流式處理完了,僅僅從寫那一刻的感覺(jué)來(lái)說(shuō)就很通暢
再見(jiàn)