【问题标题】:How can I use this Java function in Scala in a UDF?如何在 UDF 中的 Scala 中使用此 Java 函数?
【发布时间】:2021-12-19 19:51:27
【问题描述】:

我在 Scala 中创建了一个 UDF(我与 Spark btw 一起使用),以便将字符串作为参数并输出 BeiderMorseEncoder 字符串。我正在使用 来自 Apache Commons 的 org.apache.commons.codec.language.bm.BeiderMorseEncoder Java 函数

import org.apache.commons.codec.language.bm.BeiderMorseEncoder
class BeiderMorseEncode extends UDF1[String, String] {
  override def call(input: String): String = {
    val m = new BeiderMorseEncoder()
    m.encode(input)
  }
}

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

效果很好! 但是我也想使用以下功能(点击查看签名)org.apache.commons.codec.language.bm.Lang.guessLanguage

如果我尝试在 Scala 中为这个函数创建一个类似的 UDF:

import org.apache.commons.codec.language.bm.Lang
class guessNameLanguage extends UDF1[String, String] {
  override def call(input: String): String = {


    val m = new Lang()
    m.guessLanguage(input)
  }
}

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

我得到了

org.apache.commons.codec.language.bm.Lang 没有构造函数

关于如何完成这项工作的任何想法?我知道我需要先实例化一个具有构造函数的对象……但是查看了类层次结构后,我看不到那将是什么对象。 (显然不是郎)

为我蹩脚的 Scala 道歉。

【问题讨论】:

    标签: java scala class constructor user-defined-functions


    【解决方案1】:

    如果您仔细查看 Javadoc,您会发现该类提供了两个 static 方法来获取它的实例。

    所以你的代码最终应该是这样的:

    import org.apache.commons.codec.language.bm.{Lang, NameType}
    
    val m = Lang.instance(NameType.GENERIC)
    m.guessLanguage(input)
    

    【讨论】:

    • 非常感谢这成功了。这也将帮助我更多地了解如何访问类似的功能
    猜你喜欢
    • 2015-05-22
    • 2017-09-22
    • 2017-06-06
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多