Я работаю над простым требованием, чтобы узнать totalSpent каждым клиентом. Если Клиент ничего не тратить, то мне нужно, чтобы отобразить TotalSpent Сумму как 0 емуПоиск TotalSpent для каждого клиента в Scala
custs.txt:
100,Surender
101,Raja
102,Vijay
txns.txt:
100,2015-01-29,20
100,2015-01-30,18
101,2015-01-14,30
101,2015-01-17,20
Scala код :
import scala.io.Source
case class Txns(custId: Int, txn_dateString: String, spentAmount: Int)
object totalamounteachcustomer {
def main (args: Array[String])={
val myCusts=Source.fromFile("C:\\inputfiles\\custs.txt").getLines().toList;
val custsTxns=Source.fromFile("C:\\inputfiles\\txns.txt").getLines().toList;
val TxnsGrped =custsTxns.map { x => {
val Array(custId,txn_dateString,spentAmount) = x.split(",")
Txns(custId.toInt,txn_dateString,spentAmount.toInt)
}
}.groupBy { txn => txn.custId }
for(i <- myCusts)
{
val customer= i.split(",")(0).toInt
val values =TxnsGrped.get(customer)
val TotalSpentAmpunt = values match {
case Some(a:List[Txns]) => a.map { x => x.spentAmount }.sum
case None => 0
}
println(customer+" "+TotalSpentAmpunt)
}
}
}
Приведенный выше код работает ..
Выход:
100 38
101 50
102 0
ли мы просто присоединиться ключевые слова в Скале? Если нам нужно получить значения на основе общего ключа между двумя файлами, мы не можем использовать что-то вроде Join (internal join, left join) в scala?
Здесь я использую карту коллекции scala и перебираю ее по отношению к каждому клиенту.
Можем ли мы достичь этого же требования с помощью простых строк кода scala?
def join [K, A, B] (a: Карта [K, A], b: Карта [K, B]): Карта [K, (A, B)] = для ((k, va) < - a; vb <- b.get (k)) дают k -> (va, vb). Здесь, Какое использование квадратных скобок соединяется [K, A, B]? , также этот метод возвращает Map. Тип для значения возвращаемой карты - Tuple? –
@SurenderRaja Что находится внутри квадратных скобок - это параметры типа метода, которые есть там, чтобы заставить его работать с картами, имеющими любой тип ключа и значение. –
@SurenderRaja В результате получается кортеж, содержащий объединенное значение. Какой тип можно использовать для хранения двух экземпляров разных типов? Кортеж. Например: у вас есть карта из целого числа в строку, а другая - из целого числа в double. Если вы присоединяетесь к ним, единственным приемлемым типом результата для результирующих значений карты является (String, Double) –