Elixir簡單的wordcount小程式
簡單的小練習 程式碼中用三個erlang程式模擬mapper 一個程式模擬reducer
程式碼不難 只是簡單模擬了下 有興趣的可以看看^_^
defmodule Wordcount do
@moduledoc "simple wordcount program by fairjm@ituring"
@nodecount 3
def start(file) do
s = self
spawn(fn -> count(file,s) end)
end
defp count(file,caller) do
s = self
nodes = Enum.map(1..@nodecount,fn _e -> spawn(fn -> countLine end) end)
count = File.stream!(file)
|> Enum.reduce(0,fn e,r -> send(Enum.at(nodes,:random.uniform(@nodecount)-1),{e,s});r+1 end)
IO.puts("total count is #{count}")
v = countDown(count,%{})
nodes |> Enum.each(&(send(&1,Stop)))
send(caller,v)
end
defp countDown(0,m) do
IO.puts("ending")
m
end
defp countDown(n,m) do
receive do
map -> countDown(n-1, Enum.reduce(map,m,fn {k,v},r -> Map.put(r,k,Map.get(r,k,0)+v) end))
after 5000 -> countDown( n-1 , m)
end
end
defp countLine do
receive do
{line,caller} ->
IO.puts("#{inspect(self)} is doing work")
m = line
|> String.strip
|> String.split(" ")
|> Stream.filter(&(String.length(&1) > 0))
|> Enum.reduce(%{},fn e,r ->
case r[e] do
nil -> Map.put(r,e,1)
v -> Map.put(r,e,v+1)
end
end
)
send(caller,m)
countLine
Stop ->
IO.puts("#{inspect(self)} quits")
_other ->
IO.puts("error message")
countLine
end
end
end
相關文章
- Elixir 簡介
- 建立一個簡單的小程式
- 小程式 – 簡單入門
- 原生小程式最最簡單的分享功能
- 最簡單的小程式怎麼做?
- Ruby/Elixir學習小記
- 簡單的小程式小結, 瞭解一下
- 一個簡單的英漢詞典小程式
- 小程式的生命週期函式(簡單易懂)函式
- 微信小程式wx.request的簡單封裝微信小程式封裝
- 簡單-定義一個小程式元件元件
- 小程式簡單實現表格佈局
- java實現一個簡單的爬蟲小程式Java爬蟲
- Spring Boot + DD小程式 超級簡單的webscoketSpring BootWeb
- 小程式wx.request()方法簡單封裝封裝
- 微信小程式之簡單開發操作(一)微信小程式
- 【附原始碼】小程式初窺之簡單查單詞原始碼
- 一款簡單好用的微信小程式商城原始碼微信小程式原始碼
- 仿寫一個簡單的微信小程式(番茄鬧鐘)微信小程式
- JavaScript 簡單/不簡單 (小Tips分享)JavaScript
- Storm的wordcount程式碼編寫與分析ORM
- 簡單講講小程式外掛是什麼
- 02.Flink的單機wordcount、叢集安裝
- 很簡單的Flutter填小坑Flutter
- 簡單實用的《http小書》HTTP
- MapReduce 程式設計模型 & WordCount 示例程式設計模型
- 強烈推介的幾個微信小程式開發小技巧,簡單又實用微信小程式
- Erlang/Elixir 中的 OTP 程式設計介紹程式設計
- 微信小程式簡單封裝圖片上傳元件微信小程式封裝元件
- 微信小程式之網路請求簡單封裝微信小程式封裝
- Android 酒店客房管理簡單小程式Android
- 微信小程式教程01:小程式簡介微信小程式
- 「小程式JAVA實戰」小程式的表單元件(25)Java元件
- 簡單的爬蟲程式爬蟲
- Python訪問小程式簡單方法程式碼例項詳解Python
- ES6簡單總結(搭配簡單的講解和小案例)
- 微信小程式關於分享一些簡單總結微信小程式
- 簡單圖片檢視器小程式原始碼實現原始碼