Scala组合功能问题

问题描述 投票:0回答:1

我有一个像这样的输入文件:

The Works of Shakespeare, by William Shakespeare 
Language: English

我想用flatMapcombinations方法来获得每行的K-V对。

这就是我做的:

var pairs = input.flatMap{line => 
  line.split("[\\s*$&#/\"'\\,.:;?!\\[\\(){}<>~\\-_]+")
    .filter(_.matches("[A-Za-z]+"))
    .combinations(2)
    .toSeq
    .map{ case array => array(0) -> array(1)}
}

在此之后我得到了17对,但错过了其中的2对:(by,shakespeare)(william,shakespeare)。我认为第一句话的最后一个字可能有问题,但我不知道如何解决它,有人能告诉我吗?

scala apache-spark rdd
1个回答
0
投票

即使值的顺序相反,combinations方法也不会给出重复。因此,您丢失的值已经以其他顺序出现在解决方案中。

此代码将在文本中创建所有有序的单词对。

  for {
    line <- input
    t <- line.split("""\W+""").tails if t.length > 1
    a = t.head
    b <- t.tail
  } yield a -> b

以下是tails方法的描述:

迭代这个可遍历集合的尾巴。第一个值是这个可遍历的集合,最后一个将是一个空的可遍历集合,其间插值是尾部连续应用的结果。

© www.soinside.com 2019 - 2024. All rights reserved.