<!--
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.
-->

[Apache Spark](http://spark.apache.org) is the default processing engine for
PredictionIO. Download and extract it.

```
$ wget https://archive.apache.org/dist/spark/spark-<%= data.versions.spark %>/<%= data.versions.spark_download_filename %>.tgz
$ tar zxvfC <%= data.versions.spark_download_filename %>.tgz PredictionIO-<%= data.versions.pio %>/vendors
```

INFO: If you decide to install Apache Spark to another location, you must edit
`PredictionIO-<%= data.versions.pio %>/conf/pio-env.sh` and change the
`SPARK_HOME` variable to point to your own Apache Spark installation.
