@@ -48,19 +48,19 @@ private[fpm] object LocalPrefixSpan extends Logging with Serializable {
48
48
if (database.isEmpty) return Iterator .empty
49
49
50
50
val frequentItemAndCounts = getFreqItemAndCounts(minCount, database)
51
- val frequentItems = frequentItemAndCounts.map(_._1)
51
+ val frequentItems = frequentItemAndCounts.map(_._1).toSet
52
52
val frequentPatternAndCounts = frequentItemAndCounts
53
53
.map { case (item, count) => ((item :: prefix).reverse.toArray, count) }
54
54
55
55
val filteredProjectedDatabase = database.map(x => x.filter(frequentItems.contains(_)))
56
56
57
57
if (prefix.length + 1 < maxPatternLength) {
58
- frequentPatternAndCounts ++ frequentItems.flatMap { item =>
58
+ frequentPatternAndCounts.iterator ++ frequentItems.flatMap { item =>
59
59
val nextProjected = project(filteredProjectedDatabase, item)
60
60
run(minCount, maxPatternLength, item :: prefix, nextProjected)
61
61
}
62
62
} else {
63
- frequentPatternAndCounts
63
+ frequentPatternAndCounts.iterator
64
64
}
65
65
}
66
66
@@ -93,12 +93,11 @@ private[fpm] object LocalPrefixSpan extends Logging with Serializable {
93
93
*/
94
94
private def getFreqItemAndCounts (
95
95
minCount : Long ,
96
- database : Iterable [Array [Int ]]): Iterator [(Int , Long )] = {
96
+ database : Iterable [Array [Int ]]): Iterable [(Int , Long )] = {
97
97
database.flatMap(_.distinct)
98
98
.foldRight(Map [Int , Long ]().withDefaultValue(0L )) { case (item, ctr) =>
99
99
ctr + (item -> (ctr(item) + 1 ))
100
100
}
101
101
.filter(_._2 >= minCount)
102
- .iterator
103
102
}
104
103
}
0 commit comments