seq
의 strings
에 고유 한 문자 수 (유니 코드 포함)를 계산하는 작은 운동 응용 프로그램을 작성 중이며 시도 할 때 aggregate
을 사용하고 있습니다. 그목록에서 병렬 집계가 작동하지 않습니다. 길이가 8보다 작습니다.
object Frequency extends App {
val text = List("abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc", "abc");
def frequency(seq: Seq[String]):Map[Char, Int] = {
new Frequency(seq).calculate()
}
Console println frequency(seq=text)
}
의 사용을 생각하게
class Frequency(seq: Seq[String]) {
type FreqMap = Map[Char, Int]
def calculate() = {
val freqMap: FreqMap = Map[Char, Int]()
val pattern = "(\\p{L}+)".r
val seqop: (FreqMap, String) => FreqMap = (fm, s) => {
s.toLowerCase().foldLeft(freqMap){(fm, c) =>
c match {
case pattern(char) => fm.get(char) match {
case None => fm+((char, 1))
case Some(i) => fm.updated(char, i+1)
}
case _ => fm
}
}
}
val reduce: (FreqMap, FreqMap) => FreqMap =
(m1, m2) => {
m1 ++ m2.map { case (k, v) => k -> (v + m1.getOrElse(k, 0)) }
}
seq.par.aggregate(freqMap)(seqop, reduce)
}
}
다음 코드 : 여기
병렬
에서 실행하려면 내 코드입니다 나는"abc"
년대의 번호를 그대로 결과가
Map(a -> 8, b -> 8, c -> 8)
이다 "ABC"9 번을 공급> 8
내가 this을 검토 한 결과, 나는 제대로
집계를 사용하고 것처럼 보인다 작동하게하려면 어떤 제안이 필요합니까?
감사합니다. –