diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..75b806f
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..f150976
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ big-data
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..8dd9b1d
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding//src/test/java=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..d4313d4
--- /dev/null
+++ b/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ac8e750
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/pom.xml b/pom.xml
index 8169ff7..bd68aa7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,9 +10,25 @@
big-data
http://maven.apache.org
+
+
+
+ org,apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.0
+
+
+
+
UTF-8
+
+ 11
+ 11
+
+
+
@@ -20,6 +36,8 @@
mahout-core
0.9
+
+
junit
junit
diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java
new file mode 100644
index 0000000..eaf2346
--- /dev/null
+++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java
@@ -0,0 +1,128 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package nearsoft.academy.bigdata.recommendation;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import org.apache.mahout.cf.taste.common.TasteException;
+import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
+import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
+import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
+import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
+import org.apache.mahout.cf.taste.model.DataModel;
+import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
+import org.apache.mahout.cf.taste.recommender.RecommendedItem;
+import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
+import org.apache.mahout.cf.taste.similarity.UserSimilarity;
+
+/**
+ *
+ * @author fabrizzioalco
+ */
+
+public class MovieRecommender {
+ private int totalReviews;
+ private int totalProducts;
+ private int totalUsers;
+
+
+ HashMap Users = new HashMap();
+ HashMap Products = new HashMap();
+ HashMap Products2 = new HashMap();
+
+ MovieRecommender(String path) throws FileNotFoundException, IOException{
+
+ //writing the txt file
+ File movieFile = new File(path);
+ BufferedReader bufferInput = new BufferedReader(new FileReader(movieFile));
+
+ //Writing the txt to csv
+ File newMovieFile = new File("amazonMovies.csv");
+ FileWriter fw = new FileWriter(newMovieFile);
+ BufferedWriter bufferWriter = new BufferedWriter(fw);
+
+ String userID = "";
+ String productID = "";
+ String userMovieScore = "";
+ String line;
+
+ while((line = bufferInput.readLine()) != null){
+
+ switch(line.split(" ")[0]){
+ case "review/userId:":
+ userID = line.split(" ")[1];
+
+ if(Users.containsKey(userID) != true){
+ Users.put(userID, totalUsers);
+ totalUsers++;
+
+ }
+ break;
+ case "product/productId:":
+ productID = line.split(" ")[1];
+ if(Products.containsKey(productID) != true){
+ totalProducts++;
+ Products.put(productID, totalProducts);
+ Products2.put(totalProducts, productID);
+
+ }
+ break;
+ case "review/score:":
+ totalReviews++;
+ userMovieScore = line.split(" ")[1];
+ bufferWriter.write(totalUsers + "," + totalProducts + "," + userMovieScore);
+ break;
+ }
+
+ }
+ bufferInput.close();
+ bufferWriter.close();
+ }
+
+ public int getTotalReviews(){
+ return this.totalReviews;
+ }
+ public int getTotalProducts(){
+ return this.totalProducts;
+ }
+
+ public int getTotalUsers(){
+ return this.totalUsers;
+ }
+
+ public List getRecommendationsForUser(String userID) throws IOException, TasteException{
+
+ DataModel model = new FileDataModel(new File("amazonMovies.csv"));
+
+ UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
+
+ UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
+
+ UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
+
+ List recommendations = recommender.recommend(Users.get(userID), 3);
+
+ List res = new ArrayList();
+
+ for(RecommendedItem recommendation: recommendations){
+ res.add(Products2.get((int) recommendation.getItemID()));
+ }
+
+ return res;
+ }
+
+
+
+}
+
diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
index 0d0b1fe..2c4666a 100644
--- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
+++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
@@ -15,10 +15,10 @@ public class MovieRecommenderTest {
public void testDataInfo() throws IOException, TasteException {
//download movies.txt.gz from
// http://snap.stanford.edu/data/web-Movies.html
- MovieRecommender recommender = new MovieRecommender("/path/to/movies.txt.gz");
- assertEquals(7911684, recommender.getTotalReviews());
- assertEquals(253059, recommender.getTotalProducts());
- assertEquals(889176, recommender.getTotalUsers());
+ MovieRecommender recommender = new MovieRecommender("/Users/fabrizzioalco/Documents/movies.txt");
+ assertEquals(2061014, recommender.getTotalReviews());
+ assertEquals(66044, recommender.getTotalProducts());
+ assertEquals(525481, recommender.getTotalUsers());
List recommendations = recommender.getRecommendationsForUser("A141HP4LYPWMSR");
assertThat(recommendations, hasItem("B0002O7Y8U"));
diff --git a/target/classes/.netbeans_automatic_build b/target/classes/.netbeans_automatic_build
new file mode 100644
index 0000000..e69de29
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
new file mode 100644
index 0000000..ba4b625
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst
@@ -0,0 +1,2 @@
+nearsoft/academy/bigdata/recommendation/MovieRecommender.class
+nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class
diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
new file mode 100644
index 0000000..58eea46
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst
@@ -0,0 +1,2 @@
+/Users/fabrizzioalco/Documents/nearsoft/big-data/big-data-exercises/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
+/Users/fabrizzioalco/Documents/nearsoft/big-data/big-data-exercises/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java
diff --git a/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml
new file mode 100644
index 0000000..1706b2f
--- /dev/null
+++ b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.apache.mahout.cf.taste.common.NoSuchUserException: 0
+ at org.apache.mahout.cf.taste.impl.model.GenericDataModel.getPreferencesFromUser(GenericDataModel.java:213)
+ at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.getPreferencesFromUser(FileDataModel.java:665)
+ at org.apache.mahout.cf.taste.impl.similarity.AbstractSimilarity.userSimilarity(AbstractSimilarity.java:112)
+ at org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity.userSimilarity(PearsonCorrelationSimilarity.java:60)
+ at org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood.getUserNeighborhood(ThresholdUserNeighborhood.java:89)
+ at org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:87)
+ at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender.recommend(AbstractRecommender.java:63)
+ at nearsoft.academy.bigdata.recommendation.MovieRecommender.getRecommendationsForUser(MovieRecommender.java:114)
+ at nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.testDataInfo(MovieRecommenderTest.java:23)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+ at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
+ at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
+ at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
+ at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
+ at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
+
+ SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
+SLF4J: Defaulting to no-operation (NOP) logger implementation
+SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
+
+
+
\ No newline at end of file
diff --git a/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt
new file mode 100644
index 0000000..77ac12f
--- /dev/null
+++ b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt
@@ -0,0 +1,44 @@
+-------------------------------------------------------------------------------
+Test set: nearsoft.academy.bigdata.recommendation.MovieRecommenderTest
+-------------------------------------------------------------------------------
+Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 26.341 sec <<< FAILURE!
+testDataInfo(nearsoft.academy.bigdata.recommendation.MovieRecommenderTest) Time elapsed: 26.292 sec <<< ERROR!
+org.apache.mahout.cf.taste.common.NoSuchUserException: 0
+ at org.apache.mahout.cf.taste.impl.model.GenericDataModel.getPreferencesFromUser(GenericDataModel.java:213)
+ at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.getPreferencesFromUser(FileDataModel.java:665)
+ at org.apache.mahout.cf.taste.impl.similarity.AbstractSimilarity.userSimilarity(AbstractSimilarity.java:112)
+ at org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity.userSimilarity(PearsonCorrelationSimilarity.java:60)
+ at org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood.getUserNeighborhood(ThresholdUserNeighborhood.java:89)
+ at org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender.recommend(GenericUserBasedRecommender.java:87)
+ at org.apache.mahout.cf.taste.impl.recommender.AbstractRecommender.recommend(AbstractRecommender.java:63)
+ at nearsoft.academy.bigdata.recommendation.MovieRecommender.getRecommendationsForUser(MovieRecommender.java:114)
+ at nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.testDataInfo(MovieRecommenderTest.java:23)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+ at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
+ at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
+ at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
+ at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
+ at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
+ at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
+ at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
+ at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
+ at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
+ at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
+ at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
+ at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.base/java.lang.reflect.Method.invoke(Method.java:566)
+ at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
+ at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
+ at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
+ at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
+ at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
+
diff --git a/target/test-classes/.netbeans_automatic_build b/target/test-classes/.netbeans_automatic_build
new file mode 100644
index 0000000..e69de29
diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class
new file mode 100644
index 0000000..01c9e0c
Binary files /dev/null and b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class differ
diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class
new file mode 100644
index 0000000..75a598b
Binary files /dev/null and b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class differ