繁体   English   中英

读取 scala 中的文件并获取键值对作为 Map[String, List[String]]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM