PMML、Mleap、PFA 目前仅支持基于行的转换。它们都不支持基于框架的转换,例如聚合或 groupby 或 join。导出由这些操作组成的火花管道的推荐方法是什么。
2 回答
我看到 2 个选项 wrt Mleap:
1) 实现基于数据帧的转换器和SQLTransformer
等效的 -Mleap。该解决方案在概念上似乎是最好的(因为您始终可以将此类转换封装在管道元素中),但也需要大量工作。见https://github.com/combust/mleap/issues/126
2) 扩展DefaultMleapFrame
您想要执行的相应操作,然后将所需的操作实际应用于在修改的MleapServing
子项目中传递给 restserver 的数据。
实际上,我选择了 2) 并添加了implode
,explode
和join
作为 的方法,DefaultMleapFrame
并且还HashIndexedMleapFrame
允许快速连接。我没有实现groupby
and agg
,但在 Scala 中这相对容易实现。
PMML 和 PFA 是表示机器学习模型的标准,而不是数据处理管道。机器学习模型接收数据记录,对其执行一些计算,然后发出输出数据记录。因此,根据定义,您使用的是单个孤立的数据记录,而不是数据记录的集合/框架/矩阵。
如果您需要表示完整的数据处理管道(其中 ML 模型只是工作流程的一部分),那么您需要寻找其他/组合标准。或许 SQL 与 PMML 配对将是一个不错的选择。这个想法是您希望在 ML 模型之外而不是在其内部执行数据聚合(例如,SQL 数据库将比任何 PMML 或 PFA 运行时更好)。