,java,apache-spark,java-8"/>

首页 > 解决方案 > 如何解决此错误“类型不匹配:无法从列表转换到迭代器"

问题描述

我是java8和spark的新手,我试图在java中执行简单的平面图转换程序,但是我在倒数第二行的平面图转换中遇到了一些错误,Arrays.asList(e.split(" ")));错误是

类型不匹配:无法转换List<String>Iterator<String>

这个问题的适当解决方案是什么。提前致谢

 import java.util.Arrays;
 import java.util.List;

 import org.apache.spark.SparkConf;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.commons.lang.StringUtils;

 public class FlatMapExample {
           public static void main(String[] args) throws Exception {
    SparkConf sparkConf = new 
          SparkConf().setMaster("local").setAppName("filter 
          transformation");
    JavaSparkContext sc = new JavaSparkContext(sparkConf);



    // Parallelized with 2 partitions
    JavaRDD<String> rddX = sc.parallelize(
            Arrays.asList("spark rdd example", "sample example"),
            2);

    // map operation will return List of Array in following case
    JavaRDD<String[]> rddY = rddX.map(e -> e.split(" "));

    List<String[]> listUsingMap = rddY.collect();
    for(int i = 0; i < listUsingMap.size(); i++)
    {
        System.out.println("list.."+StringUtils.join(listUsingMap.get(i)));
    }
    //System.out.println("listUsingMap..."+listUsingMap.collect());

    // flatMap operation will return list of String in following case
    JavaRDD<String> rddY2 = rddX.flatMap(e -> Arrays.asList(e.split(" ")));
    List<String> listUsingFlatMap = rddY2.collect();
}

}

标签: javaapache-sparkjava-8

解决方案


您应该指定您使用的至少版本实际上返回一个2.0而不是(例如在 1.6 中就是这种情况)。因此,假设您返回 a ,而返回 a 。FlatMapFunction::callIteratorIterablerddX.flatMapIterator<String>Arrays.asList(e.split(" "))List<String>

但是List::iterator你可以使用,如:

 rddX.flatMap(e -> Arrays.asList(e.split(" ")).iterator())

推荐阅读