我还是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
命令运行它。
答案 0 :(得分:0)
正如@ Alberto-Bonsanto指出的那样,使用SparkConf conf = new SparkConf()
.setAppName(AbstractSparkImporter.class.getCanonicalName())
.setMaster("local[*]");
触发Spark来使用所有可用的线程。更多信息here。
rule_13