在Java1.8中使用Spark执行WordCount示例时出现与迭代器相关的错误
当我复制并粘贴ApacheSpark主页中的WordCount示例时,出现了以下错误。(我对lambda表达式使用了Java1.8)在Java1.8中使用Spark执行WordCount示例时出现与迭代器相关的错误,java,apache-spark,Java,Apache Spark,当我复制并粘贴ApacheSpark主页中的WordCount示例时,出现了以下错误。(我对lambda表达式使用了Java1.8) javapairdd countsk=input.flatMap(x->Arrays.asList(x.split(“”).iterator())//发生错误的位置。 .mapToPair(x->new Tuple2(x,1)) .reduceByKey((x,y)->x+y); 错误消息:不存在类型变量U的实例,因此迭代器符合Iterable。 在收到这个错误
javapairdd countsk=input.flatMap(x->Arrays.asList(x.split(“”).iterator())//发生错误的位置。
.mapToPair(x->new Tuple2(x,1))
.reduceByKey((x,y)->x+y);
错误消息:不存在类型变量U的实例,因此迭代器符合Iterable。
在收到这个错误消息后,我修复了下面的代码,它工作得很好
JavaRDD<String> words = input.flatMap(str -> Arrays.asList(str.split(" ")));
JavaPairRDD<String, Integer> pairs = words.mapToPair(str -> new Tuple2<>(str, 1));
JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b);
javarddwords=input.flatMap(str->Arrays.asList(str.split(“”));
javapairrdpairs=words.mapToPair(str->newtuple2(str,1));
javapairdd counts=pairs.reduceByKey((a,b)->a+b);
然而,这对我来说有点奇怪,因为我只是复制并粘贴了ApacheSpark提供的代码。我为什么会犯这样的错误?如何解决上述问题
我认为
flatMap
返回迭代器类型。从这个角度来看,我认为给出错误消息的第一个代码比下面的代码更准确。我有点困惑。事实上,在使用flatMap和flatMapToPair时,根据使用的spark版本,输出不同:
事实上,在使用flatMap和flatMapToPair时,根据所使用的spark版本,输出会有所不同:
您使用哪种Spark版本?您使用哪种Spark版本?
JavaRDD<String> words = input.flatMap(str -> Arrays.asList(str.split(" ")));
JavaPairRDD<String, Integer> pairs = words.mapToPair(str -> new Tuple2<>(str, 1));
JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b);