从scala中以指定格式给出的输入文件中读取输入

时间:2017-04-15 18:53:04

标签: scala

我获得了以下格式的输入文件 (A B C D]) (B,[d,A])

如何格式化此输入以获取表单中的值

  

key =>列表()

以下代码用于根据空间分割线条。

 val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))

如何存储这种格式化输入?

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我开始使用多个数据元素,无论是否有空格分隔。

%> cat junk.txt
(a,[b,c,d,e]) (w,[x,y,z])
(q,[wert,cv])(xx,[aa])

然后我打开文件并在每个前导( paren上拆分输入而不消耗该字符。

val input = io.Source.fromFile("junk.txt")
                     .getLines()
                     .flatMap(_.split("(?=\\()"))

我还需要一种方法来识别我正在寻找的模式。

val dataRE = "\\(([^,]+),\\[([^\\]]+)]".r.unanchored

现在将数据从String转换为Map s。

input.collect{case dataRE(k,v) => k -> v.split(",").toList}.toMap

结果:Map[String,List[String]]

Map(a -> List(b, c, d, e), w -> List(x, y, z), q -> List(wert, cv), xx -> List(aa))