[英]read a file in scala and get key value pairs as Map[String, List[String]]
我正在读取文件并将记录作为 Spark-scala 中的 Map[String, List[String]] 获取。 我想以纯 scala 形式实现类似的事情,没有任何火花参考(不读取 rdd)。 我应该改变什么以使其以纯 scala 方式工作
rdd
.filter(x => (x != null) && (x.length > 0))
.zipWithIndex()
.map {
case (line, index) =>
val array = line.split("~").map(_.trim)
(array(0), array(1), index)
}
.groupBy(_._1)
.mapValues(x => x.toList.sortBy(_._3).map(_._2))
.collect
.toMap
大多数情况下,除了 rdd 中的 groupBy 部分外,它将保持不变。 Scala List 还有map,filter,reduce等方法。 因此,它们几乎可以以类似的方式使用。
val lines = Source.fromFile('filename.txt').getLines.toList
一旦文件被读取并存储在 List 中,这些方法就可以应用于它。
对于 groupBy 部分,一种简单的方法是对键上的元组进行排序。 这将有效地将具有相同键的元组聚集在一起。
val grouped = scala.util.Sorting.stablesort(arr, (e1: String, e2: String, e3: String)
=> e1._1 < e2._2)
肯定会有更好的解决方案,但这将有效地完成相同的任务。
我想出了以下方法
Source.fromInputStream(
getClass.getResourceAsStream(filePath)).getLines.filter(
lines =>(lines != null) && (lines.length > 0)).map(_.split("~")).toList.groupBy(_(0)).map{ case (key, values) => (key, values.map(_(1))) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.