我有一个从Python导出的PMML模型,我在Spark中使用它进行下游处理。由于jpmml Evaluator不可序列化,我在mapPartitions中使用它。这工作正常,但需要一段时间才能完成,因为mapPartition必须实现迭代器并收集/构建新的RDD。我想知道是否有更优化的方式来执行评估器。
我注意到当Spark正在执行此rdd时,我的CPU使用不足(降至~30%)。同样来自SparkUI,TaskTime(GC Time)在53s / 15s时为红色
JavaRDD<List<ClassifiedPojo>> classifiedRdd = toBeClassifiedRdd.mapPartitions( r -> {
// initialized JPMML evaluator
List<ClassifiedPojo> list;
while(r.hasNext()){
// classify
list.add(new ClassifiedPojo())
}
return list.iterator();
});
答案 0 :(得分:0)
最后!我不得不做两件事。
首先,我必须通过运行这个来修复SAX定位器:
LocatorNullifier locatorNullifier = new LocatorNullifier();
locatorNullifier.applyTo(pmml);
其次,我重构了 mapPartitions 以使用Streams,详情为here。
这给了我很大的推动力。希望它有所帮助