我想用scala计算共同出现的术语。 但我遇到了一些问题。
这是我的代码:
val path = "pg100.txt"
val words = sc.textFile(path).map(_.toLowerCase.split("[\\s*$&#/\"'\\,.:;?!\\[\\](){}<>~\\-_]+").map(_.trim).sorted)
val coTerm = words.map{ line =>
for{
i <-0 until line.length
j <- (i+1) until line.length
} {
((line(i), line(j)), 1)
}}
预期输出应为:
coTerm.collect
res48: Array[Unit] = Array(((word1, word2), 1), ((word1, word3), 1), ((word2, word3), 1)...
但我的输出如下:
coTerm.collect
res51: Array[Unit] = Array((), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), (), ()....
我不知道为什么我可以在.map中使用println函数来打印单词对但不能发出输出。
答案 0 :(得分:2)
原因是您实际上没有从您map
返回任何记录。
使用yield
返回for
中的记录,如下所示:
val coTerm = words.map{ line =>
for{
i <-0 until line.length
j <- (i+1) until line.length
} yield {
((line(i), line(j)), 1)
}}