Scala组合函数问题

Scala组合函数问题,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有这样一个输入文件: The Works of Shakespeare, by William Shakespeare Language: English 我想使用flatMap和combinations方法来获得每行的K-V对 我就是这么做的: var pairs = input.flatMap{line => line.split("[\\s*$&#/\"'\\,.:;?!\\[\\(){}<>~\\-_]+") .filter(_.matche

我有这样一个输入文件:

The Works of Shakespeare, by William Shakespeare 
Language: English
我想使用
flatMap
combinations
方法来获得每行的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)}
}
var pairs=input.flatMap{line=>
line.split(“[\\s*$&\\\/\”,.:;?!\[\\(){}~\-\+”)
.filter(u.matches(“[A-Za-z]+”))
.组合(2)
托塞克先生
.map{case array=>array(0)->array(1)}
}

在这之后我得到了17对,但错过了其中的2对:
(莎士比亚)
(莎士比亚威廉)
。我想第一句的最后一个字可能有问题,但我不知道如何解决,有人能告诉我吗?

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

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

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

行欢迎使用StackOverflow。请避免发布图像,而是将代码作为文本发布,并通过选择代码并按Ctrl+K对其进行格式化。您还可以阅读以了解更多信息。请记住提供带有
组合的
,您将获得
(by,shakespeare)
(shakespeare,by)
,而不是两者。