Ich versuche, einige Aggregate für die Veröffentlichung von Metriken zu Cloud Watch zu tun. Ich füge meine Metrik-Zähllogik hinzu, bevor ich das Endergebnis speichere. Grundsätzlich versuche ich die Anzahl der Kunden mit Wert> 0 für jede Spalte zu ermitteln. Damit ich Nummer und Prozentsatz bekommen kann.Fehler: Wert + = ist kein Mitglied von Long Scala
case class ItemData(totalRent : Long, totalPurchase: Long, itemTypeCounts: Map[String, Int]) extends Serializable
import scala.collection.JavaConversions._
class ItemDataMetrics(startDate: String) {
var totals: ItemData = _
def countNonZero(c: Long): Int = {if (c > 0) 1 else 0}
def accumulate(featureData: ItemData) {
totals.totalRent+= countNonZero(featureData.totalRent)
totals.totalPurchase += countNonZero(featureData.totalPurchase)
for (entry <- featureData.itemTypeCounts.entrySet) {
if (totals.itemTypeCounts.contains(entry.getKey)) {
totals.itemTypeCounts.updated(entry.getKey, entry.getValue + countNonZero(entry.getValue))
} else {
totals.itemTypeCounts.put(entry.getKey, countNonZero(entry.getValue))
}
}
}
}
var totalCustomer : Int = 0
val itemMetrics: ItemDataMetrics = new ItemDataMetrics(startDate)
val resultValue = resultDF.map({
r => {
val customerId = r.getAs[String]("customerId")
val totalRent = r.getAs[Long]("totalRent")
val totalPurchase = r.getAs[Long]("totalPurchase")
val itemTypeCounts = r.getAs[Map[String, Int]]("itemType")
val items = ItemData(totalRent, totalPurchase, itemTypeCounts)
totalCustomer = totalCustomer + 1
itemMetrics.accumulate(items)
val jsonString = JacksonUtil.toJson(items)
(customerId, jsonString)
}
})
publishMetrics(startDate, featureMetrics) ---- publishes metrics to cloud watch
resultValue.saveAsTextFile("S3:....")
Aber immer Fehler halten:
<console>:26: error: value += is not a member of Long
totals.totalRent += countNonZero(itemData.totalRent)
^
<console>:27: error: value += is not a member of Long
totals.totalPurchase += countNonZero(itemData.totalPurchase)
<console>:36: error: value entrySet is not a member of Map[String,Int]
for (entry <- itemData.itemTypeCounts.entrySet) {
Ich bin neu in scala/Funken. Können mir einige sagen, was ich hier falsch mache?
Mit ItemData aktualisiert. Kann ich das irgendwie machen? – Newbie
@Newbie Sie können 'totalRent' und' totalPurchases' 'var's machen, aber vielleicht möchten Sie Ihren gesamten Ansatz ändern, um überhaupt keine Mutation zu benötigen. – sepp2k