我试图运行第一个示例。
源代码是:
/*keyWordCount.java */
import org.apache.spark.*;
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.*;
import org.apache.spark.rdd.*;
import org.apache.spark.api.java.JavaRDD;
import java.util.*;
public class keyWordCount {
public static void main(String[] args) {
SparkConf conf = new SparkConf().setAppName("keyWordCount");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> textFile = sc.textFile("output");
JavaRDD<String> dictFile = sc.textFile("keyword");
JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() {
@Override public Iterable<String> call(String s) { return Arrays.asList(s.split(" ")); }
});
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用 mvn compile package 进行编译时,不断出现以下错误:
[错误] 编译错误:[信息] ----------------------------------------- -------------------- [错误] /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[16,81] 错误:不是抽象的并且不会覆盖 FlatMapFunction 中的抽象方法 call(String)
[ERROR] /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[17,39] 错误:call(String) in 不能在 FlatMapFunction 中实现 call(T)
[错误] T 扩展接口 FlatMapFunction 中声明的对象 R 扩展接口 FlatMapFunction 中声明的对象 /home/cyberliem/TestSpark/src/main/java/keyWordCount.java:[17,5] 错误:方法没有覆盖或实现来自超类型
我不知道如何解决这个问题,谁能给我一个理想的错误原因?
试试这个:
JavaRDD<String> words = textFile.flatMap(new FlatMapFunction<String, String>() {
@Override public Iterator<String> call(String s) { return Arrays.asList(s.split(" ")).iterator(); }
});
Run Code Online (Sandbox Code Playgroud)
或者使用 lambda 更简单:
JavaRDD<String> words = textFile.flatMap(l -> Arrays.asList(l.split(" ")).iterator());
Run Code Online (Sandbox Code Playgroud)