无法在 Spark 中读取具有自定义一元转换器的管道模型

2024-04-29

我在 Spark 中定义了一个新的自定义 UnaryTransformer(示例代码中的 cleanText)并在 Pipeline 中使用它。当我保存安装的管道并尝试读回它时,出现以下错误:

java.lang.NoSuchMethodException:test_job$cleanText.read()

当我保存并加载一元变压器时,它工作正常。

重现错误的示例代码(在 Spark 2.2 中测试):

import org.apache.spark.ml.UnaryTransformer
import org.apache.spark.ml.param.DoubleParam
import org.apache.spark.ml.util.{DefaultParamsReadable, DefaultParamsWritable, Identifiable}
import org.apache.spark.sql.types._
import org.apache.spark.ml.{PipelineModel}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{DataType, DataTypes}
import org.apache.spark.util.Utils
import org.apache.spark.ml.{Pipeline, PipelineStage}
import org.apache.spark.ml.param._

object test_job {
   
  class cleanText(override val uid: String) extends UnaryTransformer[String, String, cleanText] with DefaultParamsWritable {
    
    def this() = this(Identifiable.randomUID("cleantext"))
        
    override protected def validateInputType(inputType: DataType): Unit = 
      require(inputType == StringType)
        
    
    protected def createTransformFunc: String => String = {
      val regex = "[^a-zA-Z0-9]".r
      s => regex.replaceAllIn(s, m => " ")
    }
    
    protected def outputDataType: DataType = StringType
         
  }
    
  object cleanText extends DefaultParamsReadable[cleanText]
    //{
    //  override def load(path: String): cleanText = super.load(path)
    //}
    
  def main(args: Array[String]) {
    val sc: SparkContext = new SparkContext(new SparkConf().setAppName("test_job"))
    val sqlc = SparkSession.builder.appName("test_job").getOrCreate()
    import sqlc.implicits._
    
    val cleaner = new cleanText()
    cleaner.setInputCol("word").setOutputCol("r_clean")
    
    val someDF = sc.parallelize(Seq(
      (1, "sample text 1"),
      (2, "sample text 2"),
      (3, "sample text 3")
    )).toDF("number", "word")
    
    val pipeline = new Pipeline().setStages(Array(cleaner))
    
    val pipeline_fitted = pipeline.fit(someDF)
    pipeline_fitted.write.overwrite().save("/tmp/model/")
    //Saving just the transformer
    //cleaner.write.overwrite().save("/tmp/model/")
    println("Pipeline saved")
    
    val pl2 = PipelineModel.load("/tmp/model/")
    //Loading just the transformer will work
    //val cln = cleanText.load("/tmp/model/")
    
    println("Pipeline loaded")
    sqlc.stop()
  }  
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 Spark 中读取具有自定义一元转换器的管道模型 的相关文章

随机推荐

  • MKMapview 将图钉放置在位置(长/纬度)

    我有纬度和长值 我需要能够在这个位置放置图钉 有人可以提供一些关于如何解决这个问题的建议吗 找到下面非常简单的解决方案 将引脚放置在由以下定义的给定位置CL位置坐标二维 http developer apple com library ma
  • 在 JAXB 或 Xstream 中,是否可以在解组期间过滤掉类型/值上的某些子元素

    希望大家都好 快速提问看看是否有人有任何反馈 过去两天我正在尝试 JaxB 和 Xstream 我基本上使用 XML 库将 XML 编组到 Java 对象或从 Java 对象中解组 这是一项非常简单的任务 我很快就完成了 但是 我想要解组到
  • 当用户应该有权访问他拥有的交易时,Rspec 测试失败,用户被重定向

    在我的应用程序中 借助 Cancan 我允许客户访问他自己的优惠 当我用浏览器 手动 尝试时它有效但我未能实施 rspec 测试 客户无法访问其他客户的交易 只能访问他自己的交易 管理员通过 Active Admin 界面授予他访问权限 就
  • 重用 CloudBlobClient 对象

    我有这两个对象用于 Azure Blob 存储访问 并希望在 ASP NET MVC 应用程序中使用它们 CloudBlobClient blobClient storageAccount CreateCloudBlobClient Clo
  • jQuery Masonry 和媒体查询 - 重新加载 masonry

    我的网站设计有媒体查询 以覆盖不同大小的布局 我有砌体组织一堆全尺寸宽度的浮标 没问题 在移动宽度下 所有浮子都会浮起并堆叠在一起 所以我只需要在网站大小调整为平板电脑布局且 768px
  • Struts 2 S2-016 漏洞缓解直至升级

    最近 Struts 修复了一个允许攻击者执行远程代码的漏洞 显然 不修补这个问题就像用潮流欢迎黑帽子一样 http struts apache org release 2 3 x docs s2 016 html http struts a
  • R 中自定义函数的自动创建和使用

    我想在 for 循环中创建评估不同的索引 这些指数有不同的公式 并不总是需要评估 f i 我要评估的指数可能是 a 1 b 2 c 5 d 8 IDX1 function a b result a b IDX2 function c b r
  • 故事板放大/缩小键盘快捷键

    Xcode 中可以使用什么快捷键组合来放大和缩小 是的 我知道这是一个愚蠢的问题 但谷歌搜索没有给我任何结果 甚至 Xcode 键盘快捷键也没有给我太多信息 也许我必须要求为 Xcode 4 5 提供更好的更新键盘快捷键文档 你也可以用鼠标
  • 流星和陨石(mrt)有什么区别?

    例如 有些网站告诉我使用mrt add accounts ui 使用陨石 对吧 其他人说meteor add accounts ui 据我了解 陨石 https github com oortcloud meteorite只是一个版本控制
  • “key”是MySqli中的保留字吗?我收到错误

    我刚刚真正接触 MySql MySqli 并且正在使用准备好的语句 除了这一行之外 我的整个脚本运行良好 if stmt con gt prepare SELECT bandHash userHash userPassHash type F
  • WinForms 与 mshtml 和 ie9 的问题

    IE9 似乎破坏了我的 32 位 winforms net 3 5 应用程序中基于 mshtml com 的 WebBrower html 编辑器 由于我必须使用 activex USB 设备控制器 它必须设置为 32 位 该错误不稳定 它
  • Python 中使用 RegEx 的函数解析器

    我有一个 Fortran 源代码 几乎不相关 我想解析函数名称和参数 例如使用 w with a b 1 2 2 c 3 4 我得到以下信息 如预期 b 1 2 2 c 3 4 我需要的地方 a b 1 2 2 c 3 4 b 1 2 2
  • 类验证器不验证数组

    我无法让类验证器工作 看起来我没有使用它 一切都像我没有使用类验证器一样工作 当发送正文格式不正确的请求时 我没有任何验证错误 尽管我应该这样做 My DTO import IsInt Min Max from class validato
  • Docker 与 nginx 组合不断显示欢迎页面

    我是新来的docker并尝试使用最简单的 docker compose yml 显示一个 hello world 页面 并在此基础上构建最终完整的LEMP堆栈它将与我的服务器具有相同的配置 然而大多数教程已经过时 并且有很多使用方法dock
  • 命名空间“System”中不存在类型或命名空间名称“Serialized”(您是否缺少程序集引用?

    I am VS 2012 silverlight 5 beginner I tried to serialize and de serialize from a xml file I have following error while d
  • java有索引的最小优先级队列吗?

    我需要它来实现 Dijkstra 算法 并且我确实有自己的实现 但是使用 java 自己的类记录我的代码会更容易 不 Java标准库没有这样的数据结构 我想大多数人都用这个 http algs4 cs princeton edu 24pq
  • AOP 使用 around 来避免执行方法

    我在代码中使用 Spring AOP 来拦截某个方法的执行 我正在尝试做的一个简化示例如下 public void someMethod does something Around execution someMethod public v
  • jqGrid 的排序/过滤问题

    我正在使用jqGrid 4 5 3 版本我已经升级到免费 jqGrid 版本 4 13 6 升级后我面临以下问题 排序不适用于所有列 我想根据我设置的内容显示列大小autoResizable true and autoresizeOnLoa
  • 在 Zend Framework 应用程序中,/views/filters 有什么用途?

    我知道视图助手的作用 view helpers 但我不知道视图过滤器 view filters 是什么 或者它的用途是什么 有人可以解释一下这个问题吗 谢谢你 在渲染视图结束时 Zend View 将输出传递给您已注册的任何过滤器 方法是调
  • 无法在 Spark 中读取具有自定义一元转换器的管道模型

    我在 Spark 中定义了一个新的自定义 UnaryTransformer 示例代码中的 cleanText 并在 Pipeline 中使用它 当我保存安装的管道并尝试读回它时 出现以下错误 java lang NoSuchMethodEx