我已经开始将我的Pyspark应用程序编写为Java实现。我正在使用Java 8.我刚开始在java中执行一些基本的spark progrma。我使用了以下wordcount示例。
SparkConf conf = new SparkConf().setMaster("local").setAppName("Work Count App");
// Create a Java version of the Spark Context from the configuration
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> lines = sc.textFile(filename);
JavaPairRDD<String, Integer> counts = lines.flatMap(line -> Arrays.asList(line.split(" ")))
.mapToPair(word -> new Tuple2(word, 1))
.reduceByKey((x, y) -> (Integer) x + (Integer) y)
.sortByKey();
Type mismatch: cannot convert from JavaRDD<Object> to JavaRDD<String>
我收到lines.flatMap(line -> Arrays.asList(line.split(" ")))
错误
当我用Google搜索时,在所有基于Java 8的火花示例中,我看到了相同的上述实现。我的环境或程序出了什么问题。
有人可以帮助我吗?
答案 0 :(得分:6)
使用此代码。当您的代码创建Iterator<String>
时,实际问题是rdd.flatMap函数需要List<String>
。调用iterator()将解决问题。
JavaPairRDD<String, Integer> counts = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator())
.mapToPair(word -> new Tuple2<String, Integer>(word, 1))
.reduceByKey((x, y) -> x + y)
.sortByKey();
counts.foreach(data -> {
System.out.println(data._1()+"-"+data._2());
});
答案 1 :(得分:0)
试试这段代码
JavaRDD<String> words =
lines.flatMap(line -> Arrays.asList(line.split(" ")));
JavaPairRDD<String, Integer> counts =
words.mapToPair(w -> new Tuple2<String, Integer>(w, 1))
.reduceByKey((x, y) -> x + y);
答案 2 :(得分:0)
vector
答案 3 :(得分:0)
尝试一下:
JavaRDD<String> words = input.flatMap(
new FlatMapFunction<String, String>() {
public Iterator<String> call(String s) {
return (Arrays.asList(s.split(" ")).iterator());
}
} );