如何用3个值减少ByKey?

时间:2017-04-23 00:36:02

标签: scala apache-spark

我正在尝试遍历文本文件的RDD,并对文件中的每个唯一单词进行计数,然后累积每个唯一单词后面的所有单词及其计数。到目前为止,这就是我所拥有的:

$element.css('height', `calc((${originalHeight}px - ((${originalHeight}px * ${decrease}) / 100 )))` );

enter image description here

如果到目前为止我还不清楚,我想要做的是积累文件中每个单词后面的单词集,以及单词在表单中跟随前面单词的次数:

(PrecedingWord,(FollowWord,numberOfTimesWordFollows))

其数据类型是     (String,(String,Int))

1 个答案:

答案 0 :(得分:0)

你可能想要这些内容:

(for {
  line <- lines
  Array(word1, word2) <- line.split("\\s+").sliding(2)
} yield ((word1, word2), 1))
 .reduceByKey(_ + _)
 .map({ case ((word1, word2), count) => (word1, (word2, count)) })

顺便说一下,您可能希望确保lines RDD的每个“行”对应一个句子,这样您就不会计算跨越句子边界的单词对。此外,如果你还没有,你可能想要查看一个自然语言处理库,如OpenNLP或CoreNLP,用于句子边界检测,标记化等。