2015-10-14 182 views
0

当我在maven中构建它时,它会成功编译。maven依赖项java.util.function未正确加载函数类

package com.hf.arm; 

import org.apache.spark.SparkConf; 
import java.util.Arrays; 
import java.util.List; 
import org.apache.spark.api.java.JavaRDD; 
import org.apache.spark.api.java.JavaSparkContext; 
import org.apache.spark.mllib.fpm.AssociationRules; 
import org.apache.spark.mllib.fpm.FPGrowth; 
import org.apache.spark.mllib.fpm.FPGrowthModel; 
public class App 
{ 
    public static void main(String[] args) 
    { 
     SparkConf conf = new SparkConf().setAppName("FP-growth Example"); 
     JavaSparkContext sc = new JavaSparkContext(conf); 
     JavaRDD<String> data = sc.textFile("/Users/lincolnsmith/Table_csv/sample_fpgrowth.txt"); 
    } 
} 

我需要添加一些代码,因此新的脚本的样子:

package com.hf.arm; 

import org.apache.spark.SparkConf; 
import java.util.Arrays; 
import java.util.List; 
import org.apache.spark.api.java.JavaRDD; 
import org.apache.spark.api.java.JavaSparkContext; 
import org.apache.spark.mllib.fpm.AssociationRules; 
import org.apache.spark.mllib.fpm.FPGrowth; 
import org.apache.spark.mllib.fpm.FPGrowthModel; 

public class App 
{ 
    public static void main(String[] args) 
    { 
    SparkConf conf = new SparkConf().setAppName("FP-growth Example"); 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    JavaRDD<String> data = sc.textFile("/Users/lincolnsmith/Table_csv/sample_fpgrowth.txt"); 
    JavaRDD<List<String>> transactions = data.map(
     new Function<String, List<String>>() { 
     public List<String> call(String line) { 
      String[] parts = line.split(" "); 
      return Arrays.asList(parts); 
     } 
     } 
    ); 
    FPGrowth fpg = new FPGrowth() 
     .setMinSupport(0.2) 
     .setNumPartitions(10); 
    FPGrowthModel<String> model = fpg.run(transactions); 
    for (FPGrowth.FreqItemset<String> itemset: model.freqItemsets().toJavaRDD().collect()) { 
     System.out.println("[" + itemset.javaItems() + "], " + itemset.freq()); 
    } 
    double minConfidence = 0.8; 
    for (AssociationRules.Rule<String> rule 
     : model.generateAssociationRules(minConfidence).toJavaRDD().collect()) { 
     System.out.println(
     rule.javaAntecedent() + " => " + rule.javaConsequent() + ", " + rule.confidence()); 
    } 

    } 
} 

但我得到这个错误: “找不到符号符号:类功能” 显然我”中号失踪包java.utils.function,所以我导入此

import java.util.function.Function; 

我的依赖添加到我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.hf.arm</groupId> 
    <artifactId>arm</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>arm</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> <!-- Spark dependency --> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.10</artifactId> 
     <version>1.5.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
    <artifactId>spark-mllib_2.10</artifactId> 
    <version>1.5.1</version> 
    </dependency> 
    <dependency> 
    <groupId>net.sf.m-m-m</groupId> 
    <artifactId>mmm-util-backport-java.util.function</artifactId> 
    <version>1.0.1</version> 
    </dependency> 
    </dependencies> 
<build> 
<plugins> 
    <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.3</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
    </plugin> 
</plugins> 
</build> 
</project> 

但现在我不断得到错误输出:

Lincolns-MacBook-Pro:arm lincolnsmith$ mvn package 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building arm 1.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ arm --- 
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] skip non existing resourceDirectory /Users/lincolnsmith/Table_csv/arm/src/main/resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ arm --- 
[INFO] Changes detected - recompiling the module! 
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! 
[INFO] Compiling 1 source file to /Users/lincolnsmith/Table_csv/arm/target/classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,11] '.' expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,12] ';' expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,16] class, interface, or enum expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,17] class, interface, or enum expected 
[INFO] 4 errors 
[INFO] ------------------------------------------------------------- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.241 s 
[INFO] Finished at: 2015-10-14T10:05:13-04:00 
[INFO] Final Memory: 19M/437M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project arm: Compilation failure: Compilation failure: 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,11] '.' expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,12] ';' expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,16] class, interface, or enum expected 
[ERROR] /Users/lincolnsmith/Table_csv/arm/src/main/java/com/hf/arm/App.java:[6,17] class, interface, or enum expected 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

我找不到这种依赖性不同的行家源,我已经试过清洁和排空my.m2目录。是否有java.utils.function的不同依赖项源,我可以使用它作为maven还是其他错误?

这里是我的Java版本:

Lincolns-MacBook-Pro:arm lincolnsmith$ java -version 
java version "1.8.0_51" 
Java(TM) SE Runtime Environment (build 1.8.0_51-b16) 
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode) 
+0

可能是个愚蠢的问题,但是您是否在编译JDK 8?同样在你的pom.xml中,你很难宣称你的源代码和/或目标是<1.8?我这样说是因为'函数'只能用于1.8 编辑:好的我看你正在使用某种后端口。 –

+0

另一个愚蠢的问题 - 哪里是java.util.Function的import语句?使用[IDE](https://www.jetbrains.com/idea/download/)可能会更简单? – ursa

+0

@ DamienO'Reilly他为较老的JDK使用Function的backport。请发布您的代码和POM的简单示例,我无法复制此内容。 – Tunaki

回答

0

其实你并不需要的backport包作为功能属于星火API,而不是Java的API 8。试试这个:

JavaRDD<List<String>> transactions = data.map(
    new org.apache.spark.api.java.function.Function<String, List<String>>() { 
     public List<String> call(String line) throws Exception { 
      String[] parts = line.split(" "); 
      return Arrays.asList(parts); 
     } 
    } 
); 

然后你就可以建立并使用正确的类路径运行应用程序:

mvn clean compile exec:java -Dexec.mainClass="com.hf.App" 

而且它非常精细(与预期的结果在我的情况):

... 
org.apache.spark.SparkException: A master URL must be set in your configuration 
     at org.apache.spark.SparkContext.<init>(SparkContext.scala:394) 
     ... 
+0

见上面,我做了这个改变。同样的错误。 – user1518003

+0

@ user1518003我已经更新了答案。 – ursa

+0

好吧,现在编译它,但执行它似乎有问题与函数从org.apache.spark.api.java – user1518003