---
title: "Scala Shell"
# Top-level navigation
top-nav-group: apis
top-nav-pos: 10
---
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->


Flink comes with an integrated interactive Scala Shell.
It can be used in a local setup as well as in a cluster setup. To get started with downloading
Flink and setting up a cluster please refer to
[local setup]({{ site.baseurl }}/setup/local_setup.html) or
[cluster setup]({{ site.baseurl }}/setup/cluster_setup.html)

To use the shell with an integrated Flink cluster just execute:

~~~bash
bin/start-scala-shell.sh local
~~~

in the root directory of your binary Flink directory.

To use it with a running cluster start the scala shell with the keyword `remote`
and supply the host and port of the JobManager with:

~~~bash
bin/start-scala-shell.sh remote <hostname> <portnumber>
~~~

## Usage

The shell will prebind the ExecutionEnvironment as "env", so far only batch mode is supported.

The following example will execute the wordcount program in the Scala shell:

~~~scala
Scala-Flink> val text = env.fromElements(
  "To be, or not to be,--that is the question:--",
  "Whether 'tis nobler in the mind to suffer",
  "The slings and arrows of outrageous fortune",
  "Or to take arms against a sea of troubles,")
Scala-Flink> val counts = text.flatMap { _.toLowerCase.split("\\W+") }.map { (_, 1) }.groupBy(0).sum(1)
Scala-Flink> counts.print()
~~~


The print() command will automatically send the specified tasks to the JobManager for execution and will show the result of the computation in the terminal.

It is possbile to write results to a file. However, in this case you need to call `execute`, to run your program:

~~~scala
Scala-Flink> env.execute("MyProgram")
~~~

The Flink Shell comes with command history and autocompletion.

## Adding external dependencies

It is possible to add external classpaths to the Scala-shell. These will be sent to the Jobmanager automatically alongside your shell program, when calling execute.

Use the parameter `-a <path/to/jar.jar>` or `--addclasspath <path/to/jar.jar>` to load additional classes.

~~~bash
bin/start-scala-shell.sh [local | remote <host> <port>] --addclasspath <path/to/jar.jar>
~~~
