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
nrow
head
tail
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:
```bash
sbt compile
```
Launch REPL
-----------
Shalala provides an integrated Scala REPL exposing H2O DSL.
You can start REPL via `sbt`:
```bash
sbt run
```
Key points
----------
- Using primitive types specialization (to allow for generation code using primitive types)
- All objects passed around cloud has to inherits from `water.Iced`
Examples
--------
```scala
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`
- 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 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