## org.apache.mahout.cf.taste.impl.recommender.slopeone.file
Class FileDiffStorage

    java.lang.Object
      org.apache.mahout.cf.taste.impl.recommender.slopeone.file.FileDiffStorage

All Implemented Interfaces:
  Refreshable, DiffStorage

    public final class FileDiffStorage

extends java.lang.Object
implements DiffStorage

`DiffStorage` which reads pre-computed diffs from a file and stores in memory. The file should have one diff per line:

`itemID1,itemID2,diff`

Commas or tabs can be delimiters. This is intended for use in conjuction with the output of `SlopeOneAverageDiffsJob`.

Constructor Summary
`FileDiffStorage(java.io.File dataFile, long maxEntries)`

Method Summary
`RunningAverage` `getAverageItemPref(long itemID)`
`RunningAverage` `getDiff(long itemID1, long itemID2)`
`RunningAverage[]` `getDiffs(long userID, long itemID, PreferenceArray prefs)`
`FastIDSet` `getRecommendableItemIDs(long userID)`
`void` `refresh(java.util.Collection<Refreshable> alreadyRefreshed)` Triggers "refresh" -- whatever that means -- of the implementation.
`void` `updateItemPref(long itemID, float prefDelta, boolean remove)` Updates internal data structures to reflect an update in a preference value for an item.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### FileDiffStorage

    public FileDiffStorage(java.io.File dataFile,
                           long maxEntries)
                    throws java.io.FileNotFoundException

Parameters:
  `dataFile` - diffs file
  `maxEntries` - maximum number of diffs to store
Throws:
  `java.io.FileNotFoundException` - if data file does not exist or is a directory

Method Detail

### getDiff

    public RunningAverage getDiff(long itemID1,
                                  long itemID2)

  Specified by:
    `getDiff` in interface `DiffStorage`
  Returns:
    `RunningAverage` encapsulating the average difference in preferences between items corresponding to `itemID1` and `itemID2`, in that direction; that is, it's the average of item 2's preferences minus item 1's preferences

### getDiffs

    public RunningAverage[] getDiffs(long userID,
                                     long itemID,
                                     PreferenceArray prefs)

  Specified by:
    `getDiffs` in interface `DiffStorage`
  Parameters:
    `userID` - user ID to get diffs for
    `itemID` - itemID to assess
    `prefs` - user's preferendces
  Returns:
    `RunningAverage`s for that user's item-item diffs

### getAverageItemPref

    public RunningAverage getAverageItemPref(long itemID)

  Specified by:
    `getAverageItemPref` in interface `DiffStorage`
  Returns:
    `RunningAverage` encapsulating the average preference for the given item

### updateItemPref

    public void updateItemPref(long itemID,
                               float prefDelta,
                               boolean remove)

  Description copied from interface: `DiffStorage`

  Updates internal data structures to reflect an update in a preference value for an item.

  Specified by:
    `updateItemPref` in interface `DiffStorage`
  Parameters:
    `itemID` - item to update preference value for
    `prefDelta` - amount by which preference value changed (or its old value, if being removed
    `remove` - if `true`, operation reflects a removal rather than change of preference

### getRecommendableItemIDs

    public FastIDSet getRecommendableItemIDs(long userID)

  Specified by:
    `getRecommendableItemIDs` in interface `DiffStorage`
  Returns:
    item IDs that may possibly be recommended to the given user, which may not be all items since the item-item diff matrix may be sparse

### refresh

    public void refresh(java.util.Collection<Refreshable> alreadyRefreshed)

  Description copied from interface: `Refreshable`

  Triggers "refresh" -- whatever that means -- of the implementation. The general contract is that any should always leave itself in a consistent, operational state, and that the refresh atomically updates internal state from old to new.

  Specified by:
    `refresh` in interface `Refreshable`
  Parameters:
    `alreadyRefreshed` - s that are known to have already been refreshed as a result of an initial call to a method on some object. This ensure that objects in a refresh dependency graph aren't refreshed twice needlessly.

Copyright © 2008-2010 The Apache Software Foundation. All Rights Reserved.