在Spark中使用Pmml模型

时间:2018-01-11 15:16:17

标签: java apache-spark pmml

我有一个从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();
});

1 个答案:

答案 0 :(得分:0)

最后!我不得不做两件事。

首先,我必须通过运行这个来修复SAX定位器:

LocatorNullifier locatorNullifier = new LocatorNullifier();
locatorNullifier.applyTo(pmml);

其次,我重构了 mapPartitions 以使用Streams,详情为here

这给了我很大的推动力。希望它有所帮助