Merge pull request #40 from pwendell/branch-0.8

Adding Shark 0.7.1 to EC2 scripts [branch 0.8 version]

This adds a newer version of Shark to the ec2 scripts. I've tested this for both Hadoop1 and Hadoop2 clusters.
Merge pull request #42 from pwendell/shuffle-read-perf

Fix inconsistent and incorrect log messages in shuffle read path

The user-facing messages generated by the CacheManager are currently wrong and somewhat misleading. This patch makes the messages more accurate. It also uses a consistent representation of the partition being fetched (`rdd_xx_yy`) so that it's easier for users to trace what is going on when reading logs.

(cherry picked from commit ea34c521025d3408d44d45ab5c132fd9791794f6)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #43 from mateiz/kryo-fix

Don't allocate Kryo buffers unless needed

I noticed that the Kryo serializer could be slower than the Java one by 2-3x on small shuffles because it spend a lot of time initializing Kryo Input and Output objects. This is because our default buffer size for them is very large. Since the serializer is often used on streams, I made the initialization lazy for that, and used a smaller buffer (auto-managed by Kryo) for input.

(cherry picked from commit e67d5b962a2adddc073cfc9c99be9012fbb69838)
Signed-off-by: Reynold Xin <rxin@apache.org>
add Function3 and WrappedFunction3
fix formating
Add Function4 and WrappedFunction4
Merge pull request #50 from kayousterhout/SPARK-908

Fix race condition in SparkListenerSuite (fixes SPARK-908).

(cherry picked from commit 215238cb399d46c83fafa64b3c98e0ebec21adb9)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #49 from mateiz/kryo-fix-2

Fix Chill serialization of Range objects

It used to write out each element one by one, creating very large objects.

(cherry picked from commit 320418f7c8b42d4ce781b32c9ee47a9b54550b89)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #47 from xiliu82/branch-0.8

add Function3 and WrappedFunction3

I need these two to add more API to spark streaming
Merge pull request #54 from aoiwelle/remove_unused_imports

Remove unnecessary mutable imports

It appears that the imports aren't necessary here.

(cherry picked from commit dca80094d317363e1e0d7e32bc7dfd99faf943cf)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #20 from harveyfeng/hadoop-config-cache

Allow users to pass broadcasted Configurations and cache InputFormats across Hadoop file reads.

Note: originally from https://github.com/mesos/spark/pull/942

Currently motivated by Shark queries on Hive-partitioned tables, where there's a JobConf broadcast for every Hive-partition (i.e., every subdirectory read). The only thing different about those JobConfs is the input path - the Hadoop Configuration that the JobConfs are constructed from remain the same.
This PR only modifies the old Hadoop API RDDs, but similar additions to the new API might reduce computation latencies a little bit for high-frequency FileInputDStreams (which only uses the new API right now).

As a small bonus, added InputFormats caching, to avoid reflection calls for every RDD#compute().

Few other notes:

Added a general soft-reference hashmap in SparkHadoopUtil because I wanted to avoid adding another class to SparkEnv.
SparkContext default hadoopConfiguration isn't cached. There's no equals() method for Configuration, so there isn't a good way to determine when configuration properties have changed.

(cherry picked from commit 4a25b116d4e451afdf10fc4f018c383ed2c7789a)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #52 from harveyfeng/hadoop-closure

Add an optional closure parameter to HadoopRDD instantiation to use when creating local JobConfs.

Having HadoopRDD accept this optional closure eliminates the need for the HadoopFileRDD added earlier. It makes the HadoopRDD more general, in that the caller can specify any JobConf initialization flow.

(cherry picked from commit 99796904ae9d00405584ac518b6144973a876e3c)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge branch 'branch-0.8' of https://git-wip-us.apache.org/repos/asf/incubator-spark into branch-0.8
Merge pull request #38 from AndreSchumacher/pyspark_sorting

SPARK-705: implement sortByKey() in PySpark

This PR contains the implementation of a RangePartitioner in Python and uses its partition ID's to get a global sort in PySpark.

(cherry picked from commit b4fa11f6c96ee37ecd30231c1e22630055f52115)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #28 from tgravescs/sparYarnAppName

Allow users to set the application name for Spark on Yarn

(cherry picked from commit 49dbfccf6bab64576d7c594816769c6def01b572)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #4 from MLnick/implicit-als

Adding algorithm for implicit feedback data to ALS

This PR adds the commonly used "implicit feedack" variant to ALS.

The implementation is based in part on Mahout's implementation, which is in turn based on [Collaborative Filtering for Implicit Feedback Datasets](http://research.yahoo.com/pub/2433). It has been adapted for the blocked approach used in MLlib.

I have tested this implementation against the MovieLens 100k, 1m and 10m datasets, and confirmed that it produces the same RMSE score as Mahout, as well as my own port of Mahout's implicit ALS implementation to Spark (not that RMSE is necessarily the best metric to judge by for implicit feedback, but it provides a consistent metric for comparison).

It turned out to be more straightforward than I had thought to add this. The main additions are:
1. Adding `implicitPrefs` boolean flag and `alpha` parameter
2. Added the `computeYtY` method. In each least-squares step, the algorithm requires the computation of `YtY`, where `Y` is the {user, item} factor matrix. Since the factors are already block-distributed in an `RDD`, this is quite straightforward to compute but does add an extra operation over the explicit version (but only twice per iteration)
3. Finally the actual solve step in `updateBlock` boils down to:
    * a multiplication of the `XtX` matrix by `alpha * rating`
    * a multiplication of the `Xty` vector by `1 + alpha * rating`
    * when solving for the factor vector, the implicit variant adds the `YtY` matrix to the LHS
4. Added `trainImplicit` methods in the `ALS` object
5. Added test cases for both Scala and Java - based on achieving a confidence-weighted RMSE score < 0.4 (this is taken from Mahout's test cases)

It would be great to get some feedback on this and have people test things out against some datasets (MovieLens and others and perhaps proprietary datasets) both locally and on a cluster if possible. I have not yet tested on a cluster but will try to do that soon.

I have tried to make things as efficient as possible but if there are potential improvements let me know.

The results of a run against ml-1m are below (note the vanilla RMSE scores will be very different from the explicit variant):

**INPUTS**
```
iterations=10
factors=10
lambda=0.01
alpha=1
implicitPrefs=true
```

**RESULTS**

```
Spark MLlib 0.8.0-SNAPSHOT

RMSE = 3.1544
Time: 24.834 sec
```
```
My own port of Mahout's ALS to Spark (updated to 0.8.0-SNAPSHOT)

RMSE = 3.1543
Time: 58.708 sec
```
```
Mahout 0.8

time ./factorize-movielens-1M.sh /path/to/ratings/ml-1m/ratings.dat

real	3m48.648s
user	6m39.254s
sys	0m14.505s

RMSE = 3.1539
```

Results of a run against ml-10m

```
Spark MLlib

RMSE = 3.1200
Time: 162.348 sec
```
```
Mahout 0.8

real	23m2.220s
user	43m39.185s
sys	0m25.316s

RMSE = 3.1187
```

(cherry picked from commit 3218fa795ff3ddee855772184aebe99098701d4f)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #10 from kayousterhout/results_through-bm

Send Task results through the block manager when larger than Akka frame size (fixes SPARK-669).

This change requires adding an extra failure mode: tasks can complete
successfully, but the result gets lost or flushed from the block manager
before it's been fetched.

This change also moves the deserialization of tasks into a separate thread, so it's no longer part of the DAG scheduler's tight loop. This should improve scheduler throughput, particularly when tasks are sending back large results.

Thanks Josh for writing the original version of this patch!

This is duplicated from the mesos/spark repo: https://github.com/mesos/spark/pull/835

(cherry picked from commit e597ea34a6df1733addefbb25d06cf9a25ff4f53)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge remote-tracking branch 'tgravescs/sparkYarnDistCache'

Closes #11

Signed-off-by: Reynold Xin <rxin@apache.org>

Conflicts:
	docs/running-on-yarn.md
	yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala

(cherry picked from commit 8f11c36fe17c2718c895b771b59a9138521e0079)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #25 from CruncherBigData/master

Update README: updated the link

(cherry picked from commit 405e69bb205f29010f8f01acfa2ee84e9251c1d5)
Signed-off-by: Reynold Xin <rxin@apache.org>
Merge pull request #26 from Du-Li/master

fixed a wildcard bug in make-distribution.sh; ask sbt to check local
maven repo in project/SparkBuild.scala

(1) fixed a wildcard bug in make-distribution.sh:
with the wildcard * in quotes, this cp command failed. it worked after
moving the wildcard out quotes.

(2) ask sbt to check local maven repo in SparkBuild.scala:
To build Spark (0.9.0-SNAPSHOT) with the HEAD of mesos (0.15.0), I must
do "make maven-install" under mesos/build, which publishes the java .jar
file under ~/.m2. However, when building Spark (after pointing mesos to
version 0.15.0), sbt uses ivy which by default only checks ~/.ivy2. This
change is to tell sbt to also check ~/.m2.

(cherry picked from commit 232765f7b26d933caa14e0e1bc0e4937dae90523)
Signed-off-by: Reynold Xin <rxin@apache.org>