一度にファイルの内容がメモリに読まれる事を懸念するなら遅延リスト(Stream)を使えばおk。
flattenが複数呼ばれるのがいやなら、先に束縛しておけばおk。

val file = "foo.csv"
val keywordList = List("hoge", "piyo")
val csv : Stream[Array[String]] = Source.fromFile(file).getLines.map(_.split(",")).toStream
val words = csv.flatten
val result: Map[String, Int] = keywordList.map {
keyword => (keyword -> words.filter(_ == keyword).length)
}.toMap