【问题标题】:Map one value to all values with a common relation Scala将一个值映射到具有公共关系的所有值 Scala
【发布时间】:2014-12-29 09:08:28
【问题描述】:

有一组数据:

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

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

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

{sentenceA2}->{sentenceA1, sentenceA3}

【问题讨论】:

    标签: scala map group-by reduce


    【解决方案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))
    }
    

    【讨论】:

    • 我得到错误 (String, Iterable [String]) does not take parameters pointing at ba(_)
    • 我的代码中是否发生此错误?就像您的 lines 或其他输入数据的类型不正确 - Iterator 而不是 Seq。尝试调试变量类型。
    • 关于通过 scala 将它们转换为 Seq 的任何想法?
    • @Nick 尝试找出Iterator[String] 何时出现在您的代码中。也许您从 Source.fromFile(filename).getLines() 之类的文件中读取数据?
    • @Nick 你的台词可能有Iterator 类型。对不起,我不能代替你调试你的代码。
    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2018-09-22
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多