2014-11-02 54 views
1

有一组数据:地图一个值的所有值与一个共同的关系斯卡拉

{sentenceA1}{\t}{sentenceB1} 
{sentenceA1}{\t}{sentenceB2} 
{sentenceA2}{\t}{sentenceB1} 
{sentenceA3}{\t}{sentenceB1} 
{sentenceA4}{\t}{sentenceB2}  

我想一个sentenceA映射到所有具有共同sentenceB Scala中这样的结果将是什么句子像这样:

{sentenceA1}->{sentenceA2,sentenceA3,sentenceA4} or 

{sentenceA2}->{sentenceA1, sentenceA3} 

回答

1
val lines = List(
    "sentenceA1\tsentenceB1", 
    "sentenceA1\tsentenceB2", 
    "sentenceA2\tsentenceB1", 
    "sentenceA3\tsentenceB1", 
    "sentenceA4\tsentenceB2" 
) 

val afterSplit = lines.map(_.split("\t")) 

val ba = afterSplit 
    .groupBy(_(1)) 
    .mapValues(_.map(_(0))) 

val ab = afterSplit 
    .groupBy(_(0)) 
    .mapValues(_.map(_(1))) 

val result = ab.map { case (a, b) => 
    a -> b.foldLeft(Set[String]())(_ ++ ba(_)).diff(Set(a)) 
} 
+0

我得到的错误(字符串,可迭代[字符串])不带参数 在BA(_) – Jonathan 2014-11-02 18:20:11

+0

这个错误在我的代码发生指点?这就像你的'线路'或其他输入数据具有不正确的类型 - 'Iterator'而不是'Seq'。尝试你的变量的调试类型。 – 2014-11-02 18:35:04

+0

通过scala把他们变成Seq的想法? – Jonathan 2014-11-02 19:30:59

相关问题