Skip to content

Commit

Permalink
Shalala readme rewritten into RST format.
Browse files Browse the repository at this point in the history
  • Loading branch information
mmalohlava committed Feb 17, 2014
1 parent 50248d4 commit c01d02c
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 108 deletions.
108 changes: 0 additions & 108 deletions h2o-scala/README.md

This file was deleted.

129 changes: 129 additions & 0 deletions h2o-scala/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@

Shalala
=======

Overview
--------
Shalala is a Scala library providing access to H2O API via a dedicated DSL
and also a REPL integrated into H2O.

Currently the library supports following expressions abstracting H2O API.

*R-like commands*

::

help
ncol <frame>
nrow <frame>
head <frame>
tail <frame>
f(2) - returns 2. column
f("year") - returns column "year"
f(*,2) - returns 2. column
f(*, 2 to 5) - returns 2., 3., 4., 5. columns
f(*,2)+2 - scalar operation - 2.column + 2
f(2)*3 - scalar operation - 2.column * 3
f-1 - scalar operation - all columns - 1
f < 10 - transform the frame into boolean frame respecting the condition


*H2O commands*

::

keys - shows all available keys i KV store
parse("iris.csv") - parse given file and return a frame
put("a.hex", f) - put a frame into KV store
get("b.hex") - return a frame from KV store
jobs - shows a list of executed jobs
shutdown - shutdown H2O cloud

*M/R commands*
::


f map (Add(3)) - call of map function of all columns in frame
- function is (Double=>Double) and has to extend Iced
f map (Less(10)) - call of map function on all columns
- function is (Double=>Boolean)


Build Scalala
-------------

To build Shalala `sbt` is required. You can get `sbt` from http://www.scala-sbt.org/release/docs/Getting-Started/Setup.

To compile Shalala please type:
::

sbt compile


Launch REPL
-----------
Shalala provides an integrated Scala REPL exposing H2O DSL.
You can start REPL via `sbt`:

::

sbt run


Key points of implementation
----------
* Using primitive types specialization (to allow for generation code using primitive types)
* All objects passed around cloud has to inherits from `water.Iced`

Examples
--------
::

val f = parse("smalldata/cars.csv")

f(2) // number of cylinders

f("year") // year of production

f(*, 0::2::7) // year,number of cylinders and year

f(7) map Sub(1000) // Subtract 1000 from year column

f("cylinders") map (new BOp {
var sum:scala.Double = 0
def apply(rhs:scala.Double) = { sum += rhs; rhs*rhs / sum; }
})


FAQs
----

* **How to generate Eclipse project and import it into Eclipse?**

- Launch ``sbt`` shell

- In ``sbt`` use the command ``eclipse`` to create Eclipse project files
::
> eclipse

- In Eclipse use the *Import Wizard* to import the project into workspace

* **How to run REPL from Eclipse?**

- Import *h2o-scala* project into Eclipse

- Launch ``water.api.dsl.ShalalaRepl`` as a Scala application

* **How to generate Idea project and import it?**

- Launch ``sbt``

- In ``sbt`` use the command ``gen-idea`` to create Idea project files
::
> gen-idea

- In Idea open the project located in ``h2o-scala`` directory


0 comments on commit c01d02c

Please sign in to comment.