MLeap 问题诊断

Must provide a sample dataset for the X transformer

你想要序列化的 Transformer 依赖于 Spark DataFrame 中的元数据,从而引发了这个错误。MLeap 需要访问这个元数据来保证 Transformer 能够被正确序列化,因此我们可以在 MLeap Bundle 中存储所有可能出现的值。这个方案需要提供一帧已经被 Spark ML Pipeline 成功转换的样例 DataFrame。

解决代码

  1. // Use your Spark ML Pipeline to transform the Spark DataFrame
  2. val transformedDataset = sparkTransformer.transform(sparkDataset)
  3. // Create a custom SparkBundleContext and provide the transformed DataFrame
  4. implicit val sbc = SparkBundleContext().withDataset(transformedDataset)
  5. // Serialize the pipeline as you would normally
  6. (for(bf <- managed(BundleFile(file))) yield {
  7. sparkTransformer.writeBundle.save(bf).get
  8. }).tried.get