Skip to content
Snippets Groups Projects
Commit 46ea0c1b authored by Matei Zaharia's avatar Matei Zaharia
Browse files

Merge pull request #814 from holdenk/master

Create less instances of the random class during ALS initialization.
parents 9ac3d62c 8fc40818
No related branches found
No related tags found
No related merge requests found
......@@ -124,9 +124,18 @@ class ALS private (var numBlocks: Int, var rank: Int, var iterations: Int, var l
val (productInLinks, productOutLinks) = makeLinkRDDs(numBlocks, ratingsByProductBlock)
// Initialize user and product factors randomly
val seed = new Random().nextInt()
var users = userOutLinks.mapValues(_.elementIds.map(u => randomFactor(rank, seed ^ u)))
var products = productOutLinks.mapValues(_.elementIds.map(p => randomFactor(rank, seed ^ ~p)))
var users = userOutLinks.mapPartitions {itr =>
val rand = new Random()
itr.map({case (x, y) =>
(x, y.elementIds.map(u => randomFactor(rank, rand)))
})
}
var products = productOutLinks.mapPartitions {itr =>
val rand = new Random()
itr.map({case (x, y) =>
(x, y.elementIds.map(u => randomFactor(rank, rand)))
})
}
for (iter <- 0 until iterations) {
// perform ALS update
......@@ -213,11 +222,9 @@ class ALS private (var numBlocks: Int, var rank: Int, var iterations: Int, var l
}
/**
* Make a random factor vector with the given seed.
* TODO: Initialize things using mapPartitionsWithIndex to make it faster?
* Make a random factor vector with the given random.
*/
private def randomFactor(rank: Int, seed: Int): Array[Double] = {
val rand = new Random(seed)
private def randomFactor(rank: Int, rand: Random): Array[Double] = {
Array.fill(rank)(rand.nextDouble)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment