我正在从制表符分隔的文档中读取数据,每行有4列。前4行看起来像:
1 1 5 874965758
1 2 3 876893171
1 3 4 878542960
1 4 3 876893119
第一列代表一个user-id,所以理想情况下我想从每一行中删除user-id并创建一个HashMap,其中key是user-id,值是一个Array of Arrays。例如每一行都是一个条目。
我的代码如下:
val filename = Source.fromFile("filepath.....")
val lines = filename.getLines
val linesArray = lines.map(x => x.split(" "))
val next = linesArray.toList.groupBy(_(0))
这实现了这项工作 - 使用用户ID密钥创建Map,但是,显然我没有从每一行中删除用户ID,所以我有数据复制,例如如果我next.get("1")
它会返回:List(Array(1,1,5,874965758)...)
我想删除此数组中的初始条目。
此外,当我调用String
时,当读取其中的行时会创建x.split
。但是,我需要它是Integer
。我怎样(安全地)确保这实际上是Integer
?我在测试中这样做了,但我不认为它是最好的或最有效的:
next.map(_.map(_.toInt))
由于
答案 0 :(得分:0)
将最后两行更改为
val linesArray = lines.map(_.split(" ").map(_.toInt)
val next = linesArray.groupBy(_._1).mapValues(_.tail)
答案 1 :(得分:0)
完成groupBy后,您可以执行以下操作以删除列表中的第一个条目。
grouped.mapValues( x => x.map( _.tail ) )
您可以通过执行以下操作将String键转换为Int键。
grouped.map{ case (k,v) => (k.toInt,v) }