Merge branch 'release-0.6.7'
diff --git a/bin/common.sh b/bin/common.sh
index 85f1f6f..bc123c0 100644
--- a/bin/common.sh
+++ b/bin/common.sh
@@ -2,7 +2,7 @@
# This script should be sourced with $BASE set to the base of the repository
-VERSION=0.6.6
+VERSION=0.6.7
# Play framework related
PLAY_OPTS=
diff --git a/build.sbt b/build.sbt
index 93dfdd7..6bd2d94 100644
--- a/build.sbt
+++ b/build.sbt
@@ -4,7 +4,7 @@
name := "predictionio"
-version in ThisBuild := "0.6.6"
+version in ThisBuild := "0.6.7"
organization in ThisBuild := "io.prediction"
diff --git a/dist/bin/backup b/dist/bin/backup
index 8462b1a..b8b418a 100755
--- a/dist/bin/backup
+++ b/dist/bin/backup
@@ -302,7 +302,7 @@
declare -r lib_dir="$(realpath "${app_home}/../lib")"
declare -r app_mainclass="io.prediction.tools.softwaremanager.Backup"
-declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.6.jar:$lib_dir/io.prediction.softwaremanager-0.6.6.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
+declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.7.jar:$lib_dir/io.prediction.softwaremanager-0.6.7.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
addJava "-Dconfig.file=${app_home}/../conf/predictionio.conf -Dio.prediction.base=${app_home}/.."
declare -r java_cmd=$(get_java_cmd)
diff --git a/dist/bin/common.sh b/dist/bin/common.sh
index 13cba64..151d8df 100644
--- a/dist/bin/common.sh
+++ b/dist/bin/common.sh
@@ -2,7 +2,7 @@
# This script should be sourced with $BASE set to the base of the repository
-VERSION=0.6.6
+VERSION=0.6.7
# Play framework related
PLAY_OPTS=""
diff --git a/dist/bin/restore b/dist/bin/restore
index b1f36ad..24c6afe 100755
--- a/dist/bin/restore
+++ b/dist/bin/restore
@@ -302,7 +302,7 @@
declare -r lib_dir="$(realpath "${app_home}/../lib")"
declare -r app_mainclass="io.prediction.tools.softwaremanager.Restore"
-declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.6.jar:$lib_dir/io.prediction.softwaremanager-0.6.6.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
+declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.7.jar:$lib_dir/io.prediction.softwaremanager-0.6.7.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
addJava "-Dconfig.file=${app_home}/../conf/predictionio.conf -Dio.prediction.base=${app_home}/.."
declare -r java_cmd=$(get_java_cmd)
diff --git a/dist/bin/updatecheck b/dist/bin/updatecheck
index 0873a76..8f3db7c 100755
--- a/dist/bin/updatecheck
+++ b/dist/bin/updatecheck
@@ -302,7 +302,7 @@
declare -r lib_dir="$(realpath "${app_home}/../lib")"
declare -r app_mainclass="io.prediction.tools.softwaremanager.UpdateCheck"
-declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.6.jar:$lib_dir/io.prediction.softwaremanager-0.6.6.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
+declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.7.jar:$lib_dir/io.prediction.softwaremanager-0.6.7.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
addJava "-Dconfig.file=${app_home}/../conf/predictionio.conf -Dio.prediction.base=${app_home}/.."
declare -r java_cmd=$(get_java_cmd)
diff --git a/dist/bin/upgrade b/dist/bin/upgrade
index 5bc6878..6e38675 100755
--- a/dist/bin/upgrade
+++ b/dist/bin/upgrade
@@ -302,7 +302,7 @@
declare -r lib_dir="$(realpath "${app_home}/../lib")"
declare -r app_mainclass="io.prediction.tools.softwaremanager.Upgrade"
-declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.6.jar:$lib_dir/io.prediction.softwaremanager-0.6.6.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
+declare -r app_classpath="$lib_dir/com.github.nscala-time.nscala-time_2.10-0.6.0.jar:$lib_dir/com.github.scopt.scopt_2.10-3.1.0.jar:$lib_dir/com.thoughtworks.paranamer.paranamer-2.6.jar:$lib_dir/com.typesafe.config-1.0.2.jar:$lib_dir/commons-io.commons-io-2.4.jar:$lib_dir/io.prediction.predictionio-commons-0.6.7.jar:$lib_dir/io.prediction.softwaremanager-0.6.7.jar:$lib_dir/joda-time.joda-time-2.3.jar:$lib_dir/org.joda.joda-convert-1.5.jar:$lib_dir/org.json4s.json4s-ast_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-core_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-ext_2.10-3.2.6.jar:$lib_dir/org.json4s.json4s-native_2.10-3.2.6.jar:$lib_dir/org.mongodb.casbah-commons_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-core_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-gridfs_2.10-2.6.2.jar:$lib_dir/org.mongodb.casbah-query_2.10-2.6.2.jar:$lib_dir/org.mongodb.mongo-java-driver-2.11.2.jar:$lib_dir/org.scala-lang.scala-compiler-2.10.0.jar:$lib_dir/org.scala-lang.scala-library-2.10.2.jar:$lib_dir/org.scala-lang.scala-reflect-2.10.0.jar:$lib_dir/org.scala-lang.scalap-2.10.0.jar:$lib_dir/org.slf4j.slf4j-api-1.6.0.jar:$lib_dir/org.slf4j.slf4j-nop-1.6.0.jar"
addJava "-Dconfig.file=${app_home}/../conf/predictionio.conf -Dio.prediction.base=${app_home}/.."
declare -r java_cmd=$(get_java_cmd)
diff --git a/dist/conf/init.json b/dist/conf/init.json
index d9e1eed..a4d068f 100644
--- a/dist/conf/init.json
+++ b/dist/conf/init.json
@@ -1,38 +1,38 @@
{
"systeminfos": {
"version": {
- "value": "0.6.6",
+ "value": "0.6.7",
"description": "PredictionIO version"
},
"jars.pdioItemrecAlgo": {
- "value": "predictionio-process-hadoop-scalding-assembly-0.6.6.jar"
+ "value": "predictionio-process-hadoop-scalding-assembly-0.6.7.jar"
},
"jars.pdioItemsimAlgo": {
- "value": "predictionio-process-hadoop-scalding-assembly-0.6.6.jar"
+ "value": "predictionio-process-hadoop-scalding-assembly-0.6.7.jar"
},
"jars.mahoutItemrecAlgo": {
- "value": "predictionio-process-itemrec-algorithms-scala-mahout-assembly-0.6.6.jar"
+ "value": "predictionio-process-itemrec-algorithms-scala-mahout-assembly-0.6.7.jar"
},
"jars.pdioItemrecEval": {
- "value": "predictionio-process-hadoop-scalding-assembly-0.6.6.jar"
+ "value": "predictionio-process-hadoop-scalding-assembly-0.6.7.jar"
},
"jars.pdioItemsimEval": {
- "value": "predictionio-process-hadoop-scalding-assembly-0.6.6.jar"
+ "value": "predictionio-process-hadoop-scalding-assembly-0.6.7.jar"
},
"jars.pdioItemrecTopK": {
- "value": "predictionio-process-itemrec-evaluations-topkitems-assembly-0.6.6.jar"
+ "value": "predictionio-process-itemrec-evaluations-topkitems-assembly-0.6.7.jar"
},
"jars.pdioItemsimTopK": {
- "value": "predictionio-process-itemsim-evaluations-topkitems-assembly-0.6.6.jar"
+ "value": "predictionio-process-itemsim-evaluations-topkitems-assembly-0.6.7.jar"
},
"jars.pdioCommonsEval": {
- "value": "predictionio-process-hadoop-scalding-assembly-0.6.6.jar"
+ "value": "predictionio-process-hadoop-scalding-assembly-0.6.7.jar"
},
"jars.pdioCommonsParamGen": {
- "value": "predictionio-process-commons-evaluations-paramgen-assembly-0.6.6.jar"
+ "value": "predictionio-process-commons-evaluations-paramgen-assembly-0.6.7.jar"
},
"jars.pdioCommonsU2ITrainingTestSplit": {
- "value": "predictionio-process-commons-evaluations-scala-u2itrainingtestsplittime-assembly-0.6.6.jar"
+ "value": "predictionio-process-commons-evaluations-scala-u2itrainingtestsplittime-assembly-0.6.7.jar"
}
},
"engineinfos": {
diff --git a/output/src/main/scala/io/prediction/output/itemrec/ItemRecAlgoOutput.scala b/output/src/main/scala/io/prediction/output/itemrec/ItemRecAlgoOutput.scala
index 0d7a018..4e90b51 100644
--- a/output/src/main/scala/io/prediction/output/itemrec/ItemRecAlgoOutput.scala
+++ b/output/src/main/scala/io/prediction/output/itemrec/ItemRecAlgoOutput.scala
@@ -6,6 +6,8 @@
import scala.util.Random
+import com.github.nscala_time.time.Imports._
+
trait ItemRecAlgoOutput {
/** output the Seq of iids */
def output(uid: String, n: Int, itypes: Option[Seq[String]])(implicit app: App, algo: Algo, offlineEval: Option[OfflineEval]): Iterator[String]
@@ -31,17 +33,29 @@
* of documents that can be returned from a query with geospatial constraint is 100.
* A "manual join" is still feasible with this size.
*/
- val iids: Iterator[String] = latlng.map { ll =>
+ val (iids, iidsCopy): (Iterator[String], Iterator[String]) = latlng.map { ll =>
val geoItems = items.getByAppidAndLatlng(app.id, ll, within, unit).map(_.id).toSet
// use n = 0 to return all available iids for now
- knnitembased.ItemRecKNNItemBasedAlgoOutput.output(uid, 0, itypes).filter { geoItems(_) }
+ ItemRecCFAlgoOutput.output(uid, 0, itypes).filter { geoItems(_) }
}.getOrElse {
// use n = 0 to return all available iids for now
- knnitembased.ItemRecKNNItemBasedAlgoOutput.output(uid, 0, itypes)
- }
+ ItemRecCFAlgoOutput.output(uid, 0, itypes)
+ }.duplicate
+
+ /** Start and end time filtering. */
+ val itemsForTimeCheck = items.getByIds(app.id, iidsCopy.toSeq)
+ val iidsWithValidTimeSet = (itemsForTimeCheck filter { item =>
+ (item.starttime, item.endtime) match {
+ case (Some(st), None) => DateTime.now >= st
+ case (None, Some(et)) => DateTime.now <= et
+ case (Some(st), Some(et)) => st <= DateTime.now && DateTime.now <= et
+ case _ => true
+ }
+ } map { _.id }).toSet
+ val iidsWithValidTime: Iterator[String] = iids.filter { iidsWithValidTimeSet(_) }
/** At this point "output" is guaranteed to have n*(s+1) items (seen or unseen) unless model data is exhausted. */
- val output = iids.take(finalN).toList
+ val output = iidsWithValidTime.take(finalN).toList
/** Serendipity output. */
val serendipityOutput = serendipity.map { s =>
diff --git a/output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoBatchOutput.scala b/output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoBatchOutput.scala
similarity index 83%
rename from output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoBatchOutput.scala
rename to output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoBatchOutput.scala
index 94291c8..ef985aa 100644
--- a/output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoBatchOutput.scala
+++ b/output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoBatchOutput.scala
@@ -1,10 +1,10 @@
-package io.prediction.output.itemrec.knnitembased
+package io.prediction.output.itemrec
import io.prediction.commons.Config
import io.prediction.commons.modeldata.ItemRecScore
import io.prediction.commons.settings.{ Algo, App, OfflineEval }
-object ItemRecKNNItemBasedAlgoBatchOutput {
+object ItemRecCFAlgoBatchOutput {
private val config = new Config
def output(uid: String, n: Int, itypes: Option[Seq[String]])(implicit app: App, algo: Algo, offlineEval: Option[OfflineEval]) = {
diff --git a/output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoOutput.scala b/output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoOutput.scala
new file mode 100644
index 0000000..545b28f
--- /dev/null
+++ b/output/src/main/scala/io/prediction/output/itemrec/ItemRecCFAlgoOutput.scala
@@ -0,0 +1,11 @@
+package io.prediction.output.itemrec
+
+import io.prediction.commons.modeldata.ItemRecScore
+import io.prediction.commons.settings.{ App, Algo, OfflineEval }
+
+object ItemRecCFAlgoOutput extends ItemRecAlgoOutput {
+ override def output(uid: String, n: Int, itypes: Option[Seq[String]])(implicit app: App, algo: Algo, offlineEval: Option[OfflineEval]): Iterator[String] = {
+ /** Batch mode output only for now. */
+ ItemRecCFAlgoBatchOutput.output(uid, n, itypes)
+ }
+}
diff --git a/output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoOutput.scala b/output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoOutput.scala
deleted file mode 100644
index 0aad04d..0000000
--- a/output/src/main/scala/io/prediction/output/itemrec/knnitembased/ItemRecKNNItemBasedAlgoOutput.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package io.prediction.output.itemrec.knnitembased
-
-import io.prediction.commons.modeldata.ItemRecScore
-import io.prediction.commons.settings.{ App, Algo, OfflineEval }
-import io.prediction.output.itemrec.ItemRecAlgoOutput
-
-object ItemRecKNNItemBasedAlgoOutput extends ItemRecAlgoOutput {
- override def output(uid: String, n: Int, itypes: Option[Seq[String]])(implicit app: App, algo: Algo, offlineEval: Option[OfflineEval]): Iterator[String] = {
- /** Batch mode output only for now. */
- ItemRecKNNItemBasedAlgoBatchOutput.output(uid, n, itypes)
- }
-}
diff --git a/output/src/main/scala/io/prediction/output/itemsim/ItemSimAlgoOutput.scala b/output/src/main/scala/io/prediction/output/itemsim/ItemSimAlgoOutput.scala
index 012cbf2..8b2559f 100644
--- a/output/src/main/scala/io/prediction/output/itemsim/ItemSimAlgoOutput.scala
+++ b/output/src/main/scala/io/prediction/output/itemsim/ItemSimAlgoOutput.scala
@@ -6,6 +6,8 @@
import scala.util.Random
+import com.github.nscala_time.time.Imports._
+
trait ItemSimAlgoOutput {
def output(iid: String, n: Int, itypes: Option[Seq[String]])(implicit app: App, algo: Algo, offlineEval: Option[OfflineEval]): Iterator[String]
}
@@ -30,17 +32,29 @@
* of documents that can be returned from a query with geospatial constraint is 100.
* A "manual join" is still feasible with this size.
*/
- val iids: Iterator[String] = latlng.map { ll =>
+ val (iids, iidsCopy): (Iterator[String], Iterator[String]) = latlng.map { ll =>
val geoItems = items.getByAppidAndLatlng(app.id, ll, within, unit).map(_.id).toSet
// use n = 0 to return all available iids for now
ItemSimCFAlgoOutput.output(iid, 0, itypes).filter { geoItems(_) }
}.getOrElse {
// use n = 0 to return all available iids for now
ItemSimCFAlgoOutput.output(iid, 0, itypes)
- }
+ }.duplicate
+
+ /** Start and end time filtering. */
+ val itemsForTimeCheck = items.getByIds(app.id, iidsCopy.toSeq)
+ val iidsWithValidTimeSet = (itemsForTimeCheck filter { item =>
+ (item.starttime, item.endtime) match {
+ case (Some(st), None) => DateTime.now >= st
+ case (None, Some(et)) => DateTime.now <= et
+ case (Some(st), Some(et)) => st <= DateTime.now && DateTime.now <= et
+ case _ => true
+ }
+ } map { _.id }).toSet
+ val iidsWithValidTime: Iterator[String] = iids.filter { iidsWithValidTimeSet(_) }
/** At this point "output" is guaranteed to have n*(s+1) items (seen or unseen) unless model data is exhausted. */
- val output = iids.take(finalN).toList
+ val output = iidsWithValidTime.take(finalN).toList
/** Serendipity output. */
val serendipityOutput = serendipity.map { s =>
diff --git a/output/src/test/scala/io/prediction/output/AlgoOutputSelectorSpec.scala b/output/src/test/scala/io/prediction/output/AlgoOutputSelectorSpec.scala
index eb2e013..80c21d8 100644
--- a/output/src/test/scala/io/prediction/output/AlgoOutputSelectorSpec.scala
+++ b/output/src/test/scala/io/prediction/output/AlgoOutputSelectorSpec.scala
@@ -20,12 +20,14 @@
p ^
"get itemrec output from a valid engine" ! itemRecOutputSelection(algoOutputSelector) ^
"get itemrec output with geo from a valid engine" ! itemRecOutputSelectionWithLatlng(algoOutputSelector) ^
+ "get itemrec output with time constraints from a valid engine" ! itemRecOutputSelectionWithTime(algoOutputSelector) ^
//"get itemrec output from a valid engine without seen items" ! itemRecOutputSelectionUnseenOnly(algoOutputSelector) ^
//"get itemrec output from a valid engine with an unsupported algorithm" ! itemRecOutputSelectionUnsupportedAlgo(algoOutputSelector) ^
"get itemrec output from a valid engine with no algorithm" ! itemRecOutputSelectionNoAlgo(algoOutputSelector) ^
"get itemrec output from an invalid engine" ! itemRecOutputSelectionBadEngine(algoOutputSelector) ^
"get itemsim output from a valid engine" ! itemSimOutputSelection(algoOutputSelector) ^
"get itemsim output with geo from a valid engine" ! itemSimOutputSelectionWithLatlng(algoOutputSelector) ^
+ "get itemsim output with time constraints from a valid engine" ! itemSimOutputSelectionWithTime(algoOutputSelector) ^
//"get itemsim output from a valid engine with an unsupported algorithm" ! itemSimOutputSelectionUnsupportedAlgo(algoOutputSelector) ^
"get itemsim output from a valid engine with no algorithm" ! itemSimOutputSelectionNoAlgo(algoOutputSelector) ^
"get itemsim output from an invalid engine" ! itemSimOutputSelectionBadEngine(algoOutputSelector) ^
@@ -264,7 +266,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(14).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -276,7 +278,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(23).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -288,7 +290,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(17).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -300,7 +302,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(3).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -330,6 +332,120 @@
algoOutputSelector.itemRecSelection("user1", 10, None, Some((37.3229978, -122.0321823)), Some(2.2), None)(dummyApp, engine.copy(id = engineid)) must beEqualTo(Seq(id + "hsh", id + "dac"))
}
+ def itemRecOutputSelectionWithTime(algoOutputSelector: AlgoOutputSelector) = {
+ val appid = dummyApp.id
+ val engine = Engine(
+ id = 0,
+ appid = appid,
+ name = "itemRecOutputSelectionWithTime",
+ infoid = "itemrec",
+ itypes = Some(Seq("foo", "bar")),
+ params = Map()
+ )
+ val engineid = mongoEngines.insert(engine)
+
+ val algo = Algo(
+ id = 0,
+ engineid = engineid,
+ name = "itemRecOutputSelectionWithTime",
+ infoid = "pdio-knnitembased",
+ command = "itemRecOutputSelectionWithTime",
+ params = Map("foo" -> "bar"),
+ settings = Map("dead" -> "beef"),
+ modelset = true,
+ createtime = DateTime.now,
+ updatetime = DateTime.now,
+ status = "deployed",
+ offlineevalid = None
+ )
+ val algoid = mongoAlgos.insert(algo)
+
+ val id = "itemRecOutputSelectionWithTime"
+
+ val dac = Item(
+ id = id + "dac",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = Some(DateTime.now),
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3197611, -122.0466141)),
+ inactive = None,
+ attributes = Some(Map("foo" -> "bar", "foo2" -> "bar2")))
+ val hsh = Item(
+ id = id + "hsh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = Some(DateTime.lastHour),
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3370801, -122.0493201)),
+ inactive = None,
+ attributes = None)
+ val mvh = Item(
+ id = id + "mvh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = Some(DateTime.nextHour),
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3154153, -122.0566829)),
+ inactive = None,
+ attributes = Some(Map("foo3" -> "bar3")))
+ val lbh = Item(
+ id = id + "lbh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = Some(DateTime.lastHour),
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.2997029, -122.0034684)),
+ inactive = None,
+ attributes = Some(Map("foo4" -> "bar4", "foo5" -> "bar5")))
+ val lbh2 = Item(
+ id = id + "lbh2",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.2997029, -122.0034684)),
+ inactive = None,
+ attributes = Some(Map("foo4" -> "bar4", "foo5" -> "bar5")))
+ val allItems = Seq(dac, hsh, lbh, lbh2, mvh)
+ allItems foreach { mongoItems.insert(_) }
+
+ val scores: Seq[(String, Double, Seq[String])] = Seq(
+ // (iid, score, itypes)
+ (id + "hsh", 5, Seq("foo")),
+ (id + "mvh", 4, Seq("foo")),
+ (id + "lbh", 3, Seq("bar")),
+ (id + "lbh2", 2, Seq("bar")),
+ (id + "dac", 1, Seq("bar")))
+
+ mongoItemRecScores.insert(ItemRecScore(
+ uid = "user1",
+ iids = scores.map(_._1),
+ scores = scores.map(_._2),
+ itypes = scores.map(_._3),
+ appid = dummyApp.id,
+ algoid = algoid,
+ modelset = true
+ ))
+
+ algoOutputSelector.itemRecSelection("user1", 10, None, Some((37.3229978, -122.0321823)), Some(10), None)(dummyApp, engine.copy(id = engineid)) must beEqualTo(Seq(id + "hsh", id + "mvh", id + "lbh2", id + "dac"))
+ }
+
def itemRecOutputSelectionUnseenOnly(algoOutputSelector: AlgoOutputSelector) = {
val engine = Engine(
id = 0,
@@ -536,14 +652,14 @@
)
val algoid = mongoAlgos.insert(algo)
- val id = "itemRecOutputSelectionWithLatlng"
+ val id = "itemSimOutputSelectionWithLatlng"
val dac = Item(
id = id + "dac",
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(14).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -555,7 +671,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(23).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -567,7 +683,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(17).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -579,7 +695,7 @@
appid = appid,
ct = DateTime.now,
itypes = List("fresh", "meat"),
- starttime = Some(DateTime.now.hour(3).minute(13)),
+ starttime = Some(DateTime.now),
endtime = None,
price = Some(49.394),
profit = None,
@@ -609,6 +725,120 @@
algoOutputSelector.itemSimSelection("user1", 10, None, Some((37.3229978, -122.0321823)), Some(2.2), None)(dummyApp, engine.copy(id = engineid)) must beEqualTo(Seq(id + "hsh", id + "dac"))
}
+ def itemSimOutputSelectionWithTime(algoOutputSelector: AlgoOutputSelector) = {
+ val appid = dummyApp.id
+ val engine = Engine(
+ id = 0,
+ appid = appid,
+ name = "itemSimOutputSelectionWithTime",
+ infoid = "itemsim",
+ itypes = Some(Seq("foo", "bar")),
+ params = Map()
+ )
+ val engineid = mongoEngines.insert(engine)
+
+ val algo = Algo(
+ id = 0,
+ engineid = engineid,
+ name = "itemSimOutputSelectionWithTime",
+ infoid = "pdio-knnitembased",
+ command = "itemSimOutputSelectionWithTime",
+ params = Map("foo" -> "bar"),
+ settings = Map("dead" -> "beef"),
+ modelset = true,
+ createtime = DateTime.now,
+ updatetime = DateTime.now,
+ status = "deployed",
+ offlineevalid = None
+ )
+ val algoid = mongoAlgos.insert(algo)
+
+ val id = "itemSimOutputSelectionWithTime"
+
+ val dac = Item(
+ id = id + "dac",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = Some(DateTime.now),
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3197611, -122.0466141)),
+ inactive = None,
+ attributes = Some(Map("foo" -> "bar", "foo2" -> "bar2")))
+ val hsh = Item(
+ id = id + "hsh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = Some(DateTime.lastHour),
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3370801, -122.0493201)),
+ inactive = None,
+ attributes = None)
+ val mvh = Item(
+ id = id + "mvh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = Some(DateTime.nextHour),
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.3154153, -122.0566829)),
+ inactive = None,
+ attributes = Some(Map("foo3" -> "bar3")))
+ val lbh = Item(
+ id = id + "lbh",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = Some(DateTime.lastHour),
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.2997029, -122.0034684)),
+ inactive = None,
+ attributes = Some(Map("foo4" -> "bar4", "foo5" -> "bar5")))
+ val lbh2 = Item(
+ id = id + "lbh2",
+ appid = appid,
+ ct = DateTime.now,
+ itypes = List("fresh", "meat"),
+ starttime = None,
+ endtime = None,
+ price = Some(49.394),
+ profit = None,
+ latlng = Some((37.2997029, -122.0034684)),
+ inactive = None,
+ attributes = Some(Map("foo4" -> "bar4", "foo5" -> "bar5")))
+ val allItems = Seq(dac, hsh, lbh, lbh2, mvh)
+ allItems foreach { mongoItems.insert(_) }
+
+ val scores: Seq[(String, Double, Seq[String])] = Seq(
+ // (iid, score, itypes)
+ (id + "hsh", 5, Seq("foo")),
+ (id + "mvh", 4, Seq("foo")),
+ (id + "lbh", 3, Seq("bar")),
+ (id + "lbh2", 2, Seq("bar")),
+ (id + "dac", 1, Seq("bar")))
+
+ mongoItemSimScores.insert(ItemSimScore(
+ iid = "item1",
+ simiids = scores.map(_._1),
+ scores = scores.map(_._2),
+ itypes = scores.map(_._3),
+ appid = dummyApp.id,
+ algoid = algoid,
+ modelset = true
+ ))
+
+ algoOutputSelector.itemSimSelection("item1", 10, None, Some((37.3229978, -122.0321823)), Some(10), None)(dummyApp, engine.copy(id = engineid)) must beEqualTo(Seq(id + "hsh", id + "mvh", id + "lbh2", id + "dac"))
+ }
+
def itemSimOutputSelectionUnsupportedAlgo(algoOutputSelector: AlgoOutputSelector) = {
val engine = Engine(
id = 0,
diff --git a/servers/admin/build.sbt b/servers/admin/build.sbt
index 29a59a9..4cf284c 100644
--- a/servers/admin/build.sbt
+++ b/servers/admin/build.sbt
@@ -1,6 +1,6 @@
name := "predictionio-admin"
-version := "0.6.6"
+version := "0.6.7"
organization := "io.prediction"
diff --git a/servers/api/build.sbt b/servers/api/build.sbt
index edd9687..3e6e24c 100644
--- a/servers/api/build.sbt
+++ b/servers/api/build.sbt
@@ -1,6 +1,6 @@
name := "predictionio-api"
-version := "0.6.6"
+version := "0.6.7"
organization := "io.prediction"
diff --git a/servers/scheduler/app/controllers/Jobs.scala b/servers/scheduler/app/controllers/Jobs.scala
index d68dc19..36ad4a0 100644
--- a/servers/scheduler/app/controllers/Jobs.scala
+++ b/servers/scheduler/app/controllers/Jobs.scala
@@ -161,7 +161,7 @@
command.setAttribute("modeldataTrainingDbHost", config.modeldataTrainingDbHost)
command.setAttribute("modeldataTrainingDbPort", config.modeldataTrainingDbPort)
engine.itypes foreach { it =>
- command.setAttribute("itypes", "--itypes" + it.mkString(" "))
+ command.setAttribute("itypes", "--itypes" + " " + it.mkString(" ")) // NOTE: a space ' ' is necessary after --itypes
}
command.setAttribute("numRecommendations", engine.params.getOrElse("numRecommendations", 500))
command.setAttribute("numSimilarItems", engine.params.getOrElse("numSimilarItems", 500))
diff --git a/servers/scheduler/build.sbt b/servers/scheduler/build.sbt
index cb8f40e..84d4f13 100644
--- a/servers/scheduler/build.sbt
+++ b/servers/scheduler/build.sbt
@@ -1,6 +1,6 @@
name := "predictionio-scheduler"
-version := "0.6.6"
+version := "0.6.7"
organization := "io.prediction"
diff --git a/servers/scheduler/conf/application.conf b/servers/scheduler/conf/application.conf
index 03d7dd1..b181aff 100644
--- a/servers/scheduler/conf/application.conf
+++ b/servers/scheduler/conf/application.conf
@@ -86,28 +86,28 @@
io.prediction.commons.settings.db.port=27017
# PredictionIO Algorithms
-pdio-knnitembased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-pdio-latestrank.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-pdio-randomrank.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-itembased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-parallelals.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-knnuserbased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-thresholduserbased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-slopeone.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-alswr.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-svdsgd.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-svdplusplus.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
+pdio-knnitembased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+pdio-latestrank.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+pdio-randomrank.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-itembased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-parallelals.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-knnuserbased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-thresholduserbased.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-slopeone.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-alswr.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-svdsgd.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-svdplusplus.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
-pdio-itemsimcf.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-pdio-itemsimlatestrank.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-pdio-itemsimrandomrank.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
-mahout-itemsimcf.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
+pdio-itemsimcf.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+pdio-itemsimlatestrank.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+pdio-itemsimrandomrank.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
+mahout-itemsimcf.jar=${io.prediction.itemsim.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemSim-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
# PredictionIO generic scalding job
-io.prediction.algorithms.scalding.itemrec.generic.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.6.jar
+io.prediction.algorithms.scalding.itemrec.generic.jar=${io.prediction.itemrec.base}/algorithms/hadoop/scalding/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Hadoop-Scalding-assembly-0.6.7.jar
# Itemrec Scala Mahout Algorithms
-io.prediction.algorithms.mahout.itemrec.jar=${io.prediction.itemrec.base}/algorithms/scala/mahout/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Scala-Mahout-assembly-0.6.6.jar
+io.prediction.algorithms.mahout.itemrec.jar=${io.prediction.itemrec.base}/algorithms/scala/mahout/target/scala-2.10/PredictionIO-Process-ItemRec-Algorithms-Scala-Mahout-assembly-0.6.7.jar
# Mahout core job
io.prediction.algorithms.mahout-core-job.jar=${io.prediction.base}/vendors/mahout-distribution-0.8/mahout-core-0.8-job.jar
diff --git a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Backup.scala b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Backup.scala
index 7a6a6e4..21387e6 100644
--- a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Backup.scala
+++ b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Backup.scala
@@ -27,7 +27,7 @@
def main(args: Array[String]) {
val parser = new scopt.OptionParser[BackupConfig]("backup") {
- head("PredictionIO Backup Utility", "0.6.6")
+ head("PredictionIO Backup Utility", "0.6.7")
help("help") text ("prints this usage text")
arg[String]("<backup directory>") action { (x, c) =>
c.copy(backupDir = x)
diff --git a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Restore.scala b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Restore.scala
index 48cead2..ecb9f77 100644
--- a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Restore.scala
+++ b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Restore.scala
@@ -27,7 +27,7 @@
def main(args: Array[String]) {
val parser = new scopt.OptionParser[RestoreConfig]("restore") {
- head("PredictionIO Restore Utility", "0.6.6")
+ head("PredictionIO Restore Utility", "0.6.7")
help("help") text ("prints this usage text")
opt[Unit]("upgrade") action { (_, c) =>
c.copy(upgrade = true)
diff --git a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/UpdateCheck.scala b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/UpdateCheck.scala
index 4f9ee50..993a1a1 100644
--- a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/UpdateCheck.scala
+++ b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/UpdateCheck.scala
@@ -16,7 +16,7 @@
def main(args: Array[String]) {
val parser = new scopt.OptionParser[UpdateCheckConfig]("updatecheck") {
- head("PredictionIO Update Checker", "0.6.6")
+ head("PredictionIO Update Checker", "0.6.7")
help("help") text ("prints this usage text")
opt[String]("localVersion") action { (x, c) =>
c.copy(localVersion = x)
diff --git a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Upgrade.scala b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Upgrade.scala
index 10dbac8..e492318 100644
--- a/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Upgrade.scala
+++ b/tools/softwaremanager/src/main/scala/io/prediction/tools/softwaremanager/Upgrade.scala
@@ -17,7 +17,7 @@
/** Upgrades previous version to current version. */
object Upgrade {
def main(args: Array[String]) {
- val thisVersion = "0.6.6"
+ val thisVersion = "0.6.7"
val parser = new scopt.OptionParser[UpgradeConfig]("upgrade") {
head("PredictionIO Software Upgrade Utility", thisVersion)
help("help") text ("prints this usage text")