Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.template.recommendation
- import io.prediction.controller.PDataSource
- import io.prediction.controller.EmptyEvaluationInfo
- import io.prediction.controller.EmptyActualResult
- import io.prediction.controller.Params
- import io.prediction.data.storage.Event
- import io.prediction.data.storage.Storage
- import org.apache.spark.SparkContext
- import org.apache.spark.SparkContext._
- import org.apache.spark.rdd.RDD
- import org.apache.spark.mllib.recommendation.Rating
- import grizzled.slf4j.Logger
- case class DataSourceParams(val appId: Int) extends Params
- class DataSource(val dsp: DataSourceParams)
- extends PDataSource[TrainingData,
- EmptyEvaluationInfo, Query, EmptyActualResult] {
- @transient lazy val logger = Logger[this.type]
- override
- def readTraining(sc: SparkContext): TrainingData = {
- val eventsDb = Storage.getPEvents()
- eventsDb.find(appId = 66).take(2).foreach(println(_))
- val eventsRDD: RDD[Event] = eventsDb.find(
- appId = dsp.appId,
- entityType = Some("user"),
- eventNames = Some(List("rate", "buy")), // read "rate" and "buy" event
- // targetEntityType is optional field of an event.
- targetEntityType = Some(Some("item")))(sc)
- val ratingsRDD: RDD[Rating] = eventsRDD.map { event =>
- val rating = try {
- val ratingValue: Double = event.event match {
- case "rate" => event.properties.get[Double]("rating")
- case "buy" => 4.0 // map buy event to rating value of 4
- case _ => throw new Exception(s"Unexpected event ${event} is read.")
- }
- // assume entityId and targetEntityId is originally Int type
- Rating(event.entityId.toInt,
- event.targetEntityId.get.toInt,
- ratingValue)
- } catch {
- case e: Exception => {
- logger.error(s"Cannot convert ${event} to Rating. Exception: ${e}.")
- throw e
- }
- }
- rating
- }
- new TrainingData(ratingsRDD)
- }
- }
- class TrainingData(
- val ratings: RDD[Rating]
- ) extends Serializable {
- override def toString = {
- s"ratings: [${ratings.count()}] (${ratings.take(2).toList}...)"
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement