Holumbus-MapReduce-0.0.1: Examples/MapReduce/Sort/Sort.hs
-- ----------------------------------------------------------------------------
{- |
Module : Examples.MapReduce.Sort.Sort
Copyright : Copyright (C) 2008 Stefan Schmidt
License : MIT
Maintainer : Stefan Schmidt (stefanschmidt@web.de)
Stability : experimental
Portability: portable
Version : 0.1
-}
-- ----------------------------------------------------------------------------
module Examples.MapReduce.Sort.Sort
(
sortAction
, sortActionMap
, namesList
, sortDemoJob
, createSortDemoFiles
)
where
import Data.Binary
import System.Log.Logger
import qualified Holumbus.FileSystem.FileSystem as FS
import qualified Holumbus.Data.KeyMap as KMap
import Holumbus.MapReduce.Types
localLogger :: String
localLogger = "Examples.MapReduce.Sort.Sort"
-- ----------------------------------------------------------------------------
-- Distributed Sort
-- ----------------------------------------------------------------------------
mapSort :: ActionEnvironment -> () -> () -> (String, String) -> IO [(String, (String, String))]
mapSort _ _ _ v
= do
infoM localLogger "mapSort"
debugM localLogger $ "input: " ++ show v
let res = [(snd v, v)]
debugM localLogger $ "output: " ++ show res
return res
reduceSort :: ActionEnvironment -> () -> String -> [(String, String)] -> IO (Maybe [(String, String)])
reduceSort _ _ k vs
= do
infoM localLogger "reduce/combine Sort"
debugM localLogger $ "input: " ++ k ++ " - " ++ show vs
return (Just vs)
-- ----------------------------------------------------------------------------
-- Actions
-- ----------------------------------------------------------------------------
sortAction
:: ActionConfiguration
() -- state
() (String, String) -- k1, v1
String (String, String) -- k2, v2
(String, String) -- v3 == v2
[(String, String)] -- v4
sortAction
= (defaultActionConfiguration "SORT")
{ ac_Map = Just mapAction
, ac_Combine = Nothing
, ac_Reduce = Just reduceAction
}
where
mapAction
= (defaultMapConfiguration mapSort)
reduceAction
= (defaultReduceConfiguration reduceSort)
sortActionMap :: ActionMap
sortActionMap
= KMap.insert (readActionConfiguration sortAction) $
KMap.empty
-- ----------------------------------------------------------------------------
-- DemoJob
-- ----------------------------------------------------------------------------
sortDemoJob :: JobInfo
sortDemoJob =
createJobInfoFromConfiguration
sortAction -- action config
() -- options
namesList -- input (Tuples)
[] -- input (Files)
1 -- number of splitters
2 -- number of mappers
1 -- number of reducers
1 -- number of results
TOTRawTuple -- type of the result (file of raw)
namesList :: [((),(String, String))]
namesList
= map (\d -> ((),d)) names
where
names =
[("Abraham","Simpson"),
("Apu","Nahasapeemapetilon"),
("Waylon","Smithers"),
("Barney","Gumble"),
("Bart","Simpson"),
("Carl","Carlson"),
("Homer","Simpson"),
("Jacqueline","Bouvier"),
("Kirk","van Houten"),
("Lenny","Leonard"),
("Lionel","Hutz"),
("Lisa","Simpson"),
("Luann","van Houten"),
("Maggie","Simpson"),
("Manjula","Nahasapeemapetilon"),
("Marge","Simpson"),
("Martin","Prince"),
("Maude","Flanders"),
("Milhouse","van Houten"),
("Moe","Syzslak"),
("Montgomery","Burns"),
("Ned","Flanders"),
("Patty","Bouvier"),
("Rod","Flanders"),
("Selma","Bouvier"),
("Seymour","Skinner"),
("Todd","Flanders"),
("Troy","McClure")]
-- ----------------------------------------------------------------------------
-- DemoFiles
-- ----------------------------------------------------------------------------
createSortDemoFiles :: FS.FileSystem -> IO ()
createSortDemoFiles fs
= do
-- let c = S.BinaryFile (encode ("foo","a aa aaa b bb bbb"))
-- let c = S.TextFile "harddisk file"
let c = encode namesList
FS.createFile "namesList.txt" c fs