You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala UDF调用Lang.guessLanguage提示无构造方法如何解决

错误原因

你遇到的构造方法报错是因为org.apache.commons.codec.language.bm.Lang类的构造方法为私有,不允许外部直接通过new关键字实例化,该类设计为通过静态工厂方法获取可用实例。

修复后的UDF代码

将实例化Lang的逻辑替换为调用静态方法Lang.instance()获取默认实例即可,完整代码如下:

import org.apache.commons.codec.language.bm.Lang
import org.apache.spark.sql.api.java.UDF1

class guessNameLanguage extends UDF1[String, String] {
  override def call(input: String): String = {
    val m = Lang.instance()
    m.guessLanguage(input)
  }
}

object guessNameLanguage {
  def apply(): guessNameLanguage = {
    new guessNameLanguage()
  }
}

性能优化建议

如果该UDF调用频次较高,可以将Lang实例提取为类的成员变量,避免每次执行call方法都重复获取实例,优化后代码如下:

import org.apache.commons.codec.language.bm.Lang
import org.apache.spark.sql.api.java.UDF1

class guessNameLanguage extends UDF1[String, String] {
  // 类初始化时仅生成一次Lang实例
  private val langInstance = Lang.instance()

  override def call(input: String): String = {
    langInstance.guessLanguage(input)
  }
}

object guessNameLanguage {
  def apply(): guessNameLanguage = {
    new guessNameLanguage()
  }
}

内容的提问来源于stack exchange,提问作者mamonu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:03