DataCleaner---18.5 第四步:结果

18.5 第四步:结果

很好,现在我们有了一个AnalysisResultFuture,我们已经确定它是成功的。我们能用它做什么?
job的每个分析器的结果都可以通过AnalysisResultFuture 实现的 ‘AnalysisResult’ 接口获得。请注意,analyzer结果类型彼此非常不同。例如,‘Insert into table’ 分析器生成 WriteDataResult ,而 ‘Pattern finder’ 生成 PatternFinderResult。让我们看看如何从中提取信息:
dev_job_execution_result

// demonstrate the the result
// future implements the AnalysisResult interface, which is sufficient
// for all the followin operations
AnalysisResult analysisResult = resultFuture;
List<AnalyzerResult> results = analysisResult.getResults();
for (AnalyzerResult result : results) {

  if (result instanceof WriteDataResult) {
    WriteDataResult writeDataResult = (WriteDataResult)result;
    System.out.println("Inserted " + writeDataResult.getWrittenRowCount() + " records");
  }

  if (result instanceof PatternFinderResult) {
    PatternFinderResult patternFinderResult = (PatternFinderResult)result;
    int matches = patternFinderResult.getMatchCount("Aaaaa Aaaaa")
    int total = patternFinderResult.getTotalCount();
    System.out.println("There where " + matches + " matches out of " + total + " for our standard pattern.");
  }
}

如您所见,如何处理结果在很大程度上取决于生成的结果类型。
对于结果的一般处理,包括可能出现的所有可能的结果扩展,DataCleaner使用了一个渲染器框架,该框架根据类型和优先级选择一个结果渲染器。如果您需要此类通用功能,请查看RendererBean、RendererFactory、Renderer和RenderingFormat类。
一个共同的要求是坚持下去。我们建议通过Java的序列化来实现这一点,因为分析结果是多态的,并且它的结构可能依赖于扩展。您还可以设计一个更“结构化”的持久性方案,但要注意,它需要相当多的稳定性,因为您在工作中添加了哪些分析器。
让我们看看如何使用Java序列化。但不幸的是AnalysisResultFuture不可序列化!但是,有一个类与“AnalysisResultFuture” 共享接口 “AnalysisResult”,该类是可序列化的,即“SimpleAnalysisResult”。让我们看看如何使用它,并将结果序列化为一个 .analysis.result.dat 文件(DataCleaner可以读取):

// make the result serializeable
AnalysisResult analysisResult = resultFuture;
analysisResult = new SimpleAnalysisResult(analysisResult.getResultMap());
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("my_result.analysis.result.dat"));
oos.writeObject(analysisResult);
oos.close();

例如,现在让我们通过反序列化来加载文件。为此,我们需要使用 ChangeAwareObjectInputStream类,它确保对象的向后兼容反序列化:

ObjectInputStream ois = new ChangeAwareObjectInputStream(new FileInputStream("my_result.analysis.result.dat"));
AnalysisResult analysisResult = (AnalysisResult) ois.readObject();

现在,结果已恢复,您可以进一步使用它。


点这儿返回DataCleaner文档主目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值