2017-04-15 71 views
-1

我在以下格式 (A,[B,C,d]) (B,[d,A])

如何给出一个输入文件中阶中指定的格式给定的输入文件中读取输入可以格式化该输入在形式获得值

密钥=>列表()

以下代码是用来分割上的空间基础线。

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

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

回答

0

为了解决这个问题,我开始使用多个数据元素,有和没有空白分隔。

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

然后我打开该文件,并分割每个领导(括号中输入不消耗字符。

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

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

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

我们了解String转换且该数据Map秒。

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)) 
+0

谢谢@jwvh :) –

+0

您的解决方案解决了这个问题。我不知道我们可以在Scala中将模式应用于案例匹配。 :) @jwvh –