2

私は mahout を学び始めていますが、最初のステップでプログラムに奇妙なエラーが発生しました。数行で簡単なレコメンダーを作成しようとしています。

import java.util.List;
import java.io.File;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
/**
 */
public class RecommenderIntro {
    public static void main(String[] args) throws Exception {
        // TODO code application logic here
        DataModel model =
                new FileDataModel (new File("intro.csv"));
        UserSimilarity similarity =
                new PearsonCorrelationSimilarity (model);
        UserNeighborhood neighborhood =
                new NearestNUserNeighborhood (2, similarity, model);
        Recommender recommender = new GenericUserBasedRecommender (
                model, neighborhood, similarity);
        List<RecommendedItem> recommendations =
                recommender.recommend(1, 1);
        for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
        }
    }
}

しかし、私はこのエラーが発生します

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<clinit>(FileDataModel.java:119)
    at recommenderintro.RecommenderIntro.main(RecommenderIntro.java:28)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 2 more
Java Result: 1

このコードの問題は何ですか? 本からコピペしました!


しかし、これらすべての jar ファイルを使用すると、次のエラーが発生します。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-jcl-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-jdk14-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-log4j12-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-nop-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/omid/Desktop/slf4j-1.7.2/slf4j-simple-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path, preempting StackOverflowError. 
SLF4J: See also http://www.slf4j.org/codes.html#jclDelegationLoop for more details.
Exception in thread "main" java.lang.ExceptionInInitializerError
    at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:73)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:42)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<clinit>(FileDataModel.java:119)
    at recommenderintro.RecommenderIntro.main(RecommenderIntro.java:28)
Caused by: java.lang.IllegalStateException: Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#jclDelegationLoop for more details.
    at org.slf4j.impl.JCLLoggerFactory.<clinit>(JCLLoggerFactory.java:55)
    ... 9 more
Java Result: 1

余分なjarファイルを使用していますか?

4

3 に答える 3

3

クラスパスにslf4jプロジェクトの jar が必要です。

からダウンロードしてください: http://www.slf4j.org/download.html

于 2012-11-08T15:11:56.890 に答える
2

ソース コードを取得するか、少なくとも例のソース コードを含むリポジトリpom.xmlから取得してください。これはすべての依存関係を指定し、すべてがさまざまな Mahout のバージョンで動作するようにテストされています。サンプルの使用を開始する方法については、このブログ投稿を参照してください。pom.xml

于 2012-11-09T06:53:10.980 に答える