@@ -48,19 +48,19 @@ private[fpm] object LocalPrefixSpan extends Logging with Serializable {
4848    if  (database.isEmpty) return  Iterator .empty
4949
5050    val  frequentItemAndCounts  =  getFreqItemAndCounts(minCount, database)
51-     val  frequentItems  =  frequentItemAndCounts.map(_._1)
51+     val  frequentItems  =  frequentItemAndCounts.map(_._1).toSet 
5252    val  frequentPatternAndCounts  =  frequentItemAndCounts
5353      .map { case  (item, count) =>  ((item ::  prefix).reverse.toArray, count) }
5454
5555    val  filteredProjectedDatabase  =  database.map(x =>  x.filter(frequentItems.contains(_)))
5656
5757    if  (prefix.length +  1  <  maxPatternLength) {
58-       frequentPatternAndCounts ++  frequentItems.flatMap { item => 
58+       frequentPatternAndCounts.iterator  ++  frequentItems.flatMap { item => 
5959        val  nextProjected  =  project(filteredProjectedDatabase, item)
6060        run(minCount, maxPatternLength, item ::  prefix, nextProjected)
6161      }
6262    } else  {
63-       frequentPatternAndCounts
63+       frequentPatternAndCounts.iterator 
6464    }
6565  }
6666
@@ -93,12 +93,11 @@ private[fpm] object LocalPrefixSpan extends Logging with Serializable {
9393   */  
9494  private  def  getFreqItemAndCounts (
9595      minCount : Long ,
96-       database : Iterable [Array [Int ]]):  Iterator [(Int , Long )] =  {
96+       database : Iterable [Array [Int ]]):  Iterable [(Int , Long )] =  {
9797    database.flatMap(_.distinct)
9898      .foldRight(Map [Int , Long ]().withDefaultValue(0L )) { case  (item, ctr) => 
9999        ctr +  (item ->  (ctr(item) +  1 ))
100100      }
101101      .filter(_._2 >=  minCount)
102-       .iterator
103102  }
104103}
0 commit comments