java - 如何在 UDF 中的 Scala 中使用此 Java 函数?
问题描述
我在 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 没有构造函数
关于如何使这项工作的任何想法?我了解我需要先实例化一个具有构造函数的对象……但是查看了类层次结构后,我看不到那将是什么对象。(显然不是郎)
Apologies for my cringy Scala.
解决方案
If you look closely at the Javadoc you will see that the class provides two static
methods to get instances of it.
So your code should end up being like this:
import org.apache.commons.codec.language.bm.{Lang, NameType}
val m = Lang.instance(NameType.GENERIC)
m.guessLanguage(input)
推荐阅读
- grafana - Centos8 上的 Grafana:无法使用“临时过滤器”
- python-3.x - 在不同的响应中获得许多结果?Discord.py / SQLite
- css - 网格调整 2 个孩子的内容以匹配最大的一个
- http4s - 如何在客户端断开连接的情况下流式传输 fs2.Queue 而不会丢失项目
- python - 在具有多个 Python 版本的 Windows 上安装 Python 模块
- c - C中的服务器到客户端广播
- azure - Azure 函数主机在 URI 路径无效的情况下提供消息:
- java - 如何使用声明式服务正确扩展 OSGi 服务?
- jenkins - 在詹金斯奴隶中找不到maven
- python - Python DDD模型中的递归关系