使用forEachRemaining时,Spark仅使用一个核心

时间:2016-03-02 00:05:41

标签: apache-spark

我还是Spark的新手。我编写了这段代码来解析大字符串列表。

我不得不使用forEachRemaining,因为我必须在每个分区中初始化一些不可序列化的对象。

    JavaRDD<String> lines=initRetriever();
    lines.foreachPartition(iter->{
        Obj1 obj1=initObj1()
        MyStringParser parser=new MyStringParser(obj1);
        iter.forEachRemaining(str->{
            try {
                parser.parse(str);
            } catch (ParsingException e) {
                e.printStackTrace();
            }
        });

        System.out.print("all parsed");
        obj1.close();
    });

我相信Spark就是并行性。但是这个程序在我的本地机器上只使用一个线程。我做错什么了吗?缺少配置?或者iter可能不允许它并行执行。

修改

我没有Spark的配置文件。

这就是我初始化Spark

的方式
SparkConf conf = new SparkConf()
                .setAppName(AbstractSparkImporter.class.getCanonicalName())
                .setMaster("local");

我在IDE上使用mvn:exec命令运行它。

1 个答案:

答案 0 :(得分:0)

正如@ Alberto-Bonsanto指出的那样,使用SparkConf conf = new SparkConf() .setAppName(AbstractSparkImporter.class.getCanonicalName()) .setMaster("local[*]"); 触发Spark来使用所有可用的线程。更多信息here

rule_13