我的数据有以下格式
{sentenceA1}{tab}{sentenceB1}
{sentenceA2}{tab}{sentenceB1}
{sentenceA3}{tab}{sentenceB2}
{sentenceA4}{tab}{sentenceB2}
我希望使用Scala获得与B匹配的句子数组
[sentenceA1, sentenceA2]
[sentenceA3, sentenceA4]
我尝试了以下
val file1 = file.map(line => line.split("\t"))
val file2 = file1.map(line => (line(1), line(0)))
file2.reduceLeft(_+_).collect
但不成功
答案 0 :(得分:4)
你可以这样做:
list.map(line => line.split("\t")).
map(a => a(1) -> a(0)).
groupBy(_._1).
mapValues(_.map(_._2))
或者
list.map(line => line.split("\t")).
groupBy(_(1)).
mapValues(_.map(_(0)))
你会得到一张地图
{SentenceB1} -> {sentenceA1, sentenceA2}
{SentenceB2} -> {sentenceA3, sentenceA4}
答案 1 :(得分:1)
从数据源中读取您的行(我使用预定义列表来简化示例):
val lines = List(
"sentenceA1\tsentenceB1",
"sentenceA2\tsentenceB1",
"sentenceA3\tsentenceB2",
"sentenceA4\tsentenceB2"
)
处理每一行:
代码如下所示:
val result = lines
.map(_.split("\t"))
.groupBy(_(1))
.mapValues( _.map(_(0)))
答案 2 :(得分:0)
还要考虑一个容器类
case class Text(s:String) {
val Array(a,b,_*) = s.split("\t")
}
分割List[String]
中的每个元素;从而
for ( (k,xs) <- lines.map(Text(_)).groupBy(_.b) ) yield k -> xs.map(_.a)
提供所需的关联。