Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Map Function
- let mapfunc (k, v) =
- v |> Seq.map (fun(pet) -> (pet, 1))
- // Reduce Function
- let reducefunc (k, (vs:seq<int>)) =
- let count = vs |> Seq.sum
- k, Seq.ofList([count])
- // Map Reduce
- let mapreduce map reduce (inputs:seq<_*_>) =
- let intermediates = inputs |> Seq.map map |> Seq.concat
- let groupings = intermediates |> Seq.groupBy fst |> Seq.map (fun(x,y) -> x, Seq.map snd y)
- let results = groupings |> Seq.map reduce
- results
- let alice = ("Alice", ["Dog";"Cat"])
- let bob = ("Bob",["Cat"])
- let charlie = ("Charlie",["Mouse"; "Cat"; "Dog"])
- let dennis = ("Dennis", [])
- let people = [alice; bob; charlie; dennis]
- [<EntryPoint>]
- let main argv =
- let results = people |> mapreduce mapfunc reducefunc
- for result in results do
- let animal = fst result
- let count = ((snd result) |> Seq.toArray).[0]
- printfn "%s : %s" animal (count.ToString())
- System.Console.WriteLine("done...")
- System.Console.ReadKey() |> ignore
- 0
Add Comment
Please, Sign In to add comment