Author: srowen
Date: Sat Jan 17 07:24:43 2009
New Revision: 735304
URL: http://svn.apache.org/viewvc?rev=735304&view=rev
Log:
Support compressed input files
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterable.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterator.java
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterable.java
URL:
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterable.java?rev=735304&r1=735303&r2=735304&view=diff
==============================================================================
---
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterable.java
(original)
+++
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterable.java
Sat Jan 17 07:24:43 2009
@@ -26,6 +26,8 @@
* Iterable representing the lines of a text file. It can produce an {...@link
Iterator} over those lines.
* This assumes the text file's lines are delimited in a manner
* consistent with how {...@link java.io.BufferedReader} defines lines.
+ *
+ * This class will uncompress files that end in .zip or .gz accordingly, too.
*/
public final class FileLineIterable implements Iterable<String> {
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterator.java
URL:
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterator.java?rev=735304&r1=735303&r2=735304&view=diff
==============================================================================
---
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterator.java
(original)
+++
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/common/FileLineIterator.java
Sat Jan 17 07:24:43 2009
@@ -27,12 +27,16 @@
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.NoSuchElementException;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.ZipInputStream;
import java.nio.charset.Charset;
/**
* Iterates over the lines of a text file. This assumes the text file's lines
* are delimited in a manner consistent with how {...@link BufferedReader}
* defines lines.
+ *
+ * This class will uncompress files that end in .zip or .gz accordingly, too.
*/
public final class FileLineIterator implements Iterator<String>, Closeable {
@@ -56,7 +60,7 @@
* @throws IOException if the file cannot be read
*/
public FileLineIterator(File file, Charset encoding, boolean skipFirstLine)
throws IOException {
- InputStream is = new FileInputStream(file);
+ InputStream is = getFileInputStream(file);
reader = new BufferedReader(new InputStreamReader(is, encoding));
if (skipFirstLine) {
reader.readLine();
@@ -64,6 +68,18 @@
nextLine = reader.readLine();
}
+ private static InputStream getFileInputStream(File file) throws IOException {
+ InputStream is = new FileInputStream(file);
+ String name = file.getName();
+ if (name.endsWith(".gz")) {
+ return new GZIPInputStream(is);
+ } else if (name.endsWith(".zip")) {
+ return new ZipInputStream(is);
+ } else {
+ return is;
+ }
+ }
+
@Override
public boolean hasNext() {
return nextLine != null;
Modified:
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
URL:
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java?rev=735304&r1=735303&r2=735304&view=diff
==============================================================================
---
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
(original)
+++
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/model/file/FileDataModel.java
Sat Jan 17 07:24:43 2009
@@ -72,7 +72,8 @@
private final ReentrantLock reloadLock;
/**
- * @param dataFile file containing preferences data
+ * @param dataFile file containing preferences data. If file is compressed
(and name ends in .gz
+ * or .zip accordingly) it will be decompressed as it is read)
* @throws FileNotFoundException if dataFile does not exist
*/
public FileDataModel(File dataFile) throws FileNotFoundException {