anchor.diff:    ],
     "servingParams":{
       "":{
  -      
  +
       }
     }
   }
  
positive.code:   @transient lazy val logger = Logger[this.type]
  
    def getRatings(sc: SparkContext): RDD[Rating] = {
      val eventsDb = Storage.getPEvents()
      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.
  
negative.code: 
  We have two types of `Metric`s.
  
  - `PositiveCount` is a helper metrics that returns the average
  number of positive samples for a specific rating threshold, therefore we get some
  idea about the *demographic* of the data. If `PositiveCount` is too low or too
  high for certain threshold, we know that it should not be used.
  We have three thresholds (line 2), and three instances of
  `PositiveCount` metric are instantiated (line 10), one for each threshold.
  
  - `Precision@K` is the actual metrics we use.
  We have two lists of parameters (lines 2 to 3): `ratingThreshold` defines what rating is good,
  and `k` defines how many items we evaluate in the `PredictedResult`.
  We generate a list of all combinations (line 11).
  
  These metrics are expecified as `otherMetrics` (lines 9 to 11), they
  will be calculated and generated on the evaluation UI.
  
  To run this evaluation, you can:
  