java - 可从 PySpark/Python 调用的 Spark (2.3+) Java 函数
问题描述
重新 Spark Doc 2.3:
registerJavaFunction(name, javaClassName, returnType=None)[源代码]
将 Java 用户定义函数注册为 SQL 函数。
除了名称和函数本身之外,还可以 > 可选地指定返回类型。当未指定返回类型时,我们将通过反射推断它。
参数:
name – 用户定义函数的名称
javaClassName – java 类的完全限定名
returnType – 注册的 Java 函数的返回类型。该值可以是 pyspark.sql.types.DataType 对象或 DDL 格式的类型字符串。
我的问题:
我想要一个包含大量 UDF 的库,用于 Spark 2.3+,全部用 Java 编写,并且都可以从 PySpark/Python 访问。
阅读我在上面链接的文档,似乎在类和 Java UDF 函数之间存在一对一的映射(可从 PySpark 中的 Spark-SQL 调用)。因此,如果我说 10 个 Java UDF 函数,那么我需要创建 10 个公共 Java 类,每个类有 1 个 UDF,以使它们可以从 PySpark/SQL 调用。
这个对吗?
我可以创建 1 个公共 Java 类并在 1 个类中放置许多不同的 UDF,并使所有 UDF 都可以从 Spark 2.3 中的 PySpark 调用吗?
这篇文章没有提供任何Java示例代码来帮助解决我的问题。看起来这一切都在 Scala 中。我想要这一切都用Java。我是否需要扩展一个类或实现接口才能在 Java 中做到这一点? 任何指向要从 PySpark-SQL 调用的示例 Java 代码的链接都将不胜感激。
解决方案
因此,如果我说 10 个 Java UDF 函数,那么我需要创建 10 个公共 Java 类,每个类有 1 个 UDF,以使它们可以从 PySpark/SQL 调用。
这个对吗?
对,那是正确的。但是,您可以:
- 使用
UserDefinedFunction
和接口它,如Spark:How to map Python with Scala or Java User Defined Functions? - 用于
UDFRegistration.register
注册 namedudfs
,然后org.apache.spark.sql.functions.callUDF
通过 Py4j 为每个注册的函数调用。
推荐阅读
- javascript - nodejs - Set-Cookie 出现在响应中但在浏览器中丢失
- javascript - 从 href 调用 javascript 函数
- node.js - 使用节点 js 将 aac 文件写入光盘
- kubernetes - FailedScheduling:0/3 个节点可用:3 个 Pod 不足
- python - 使用 pandas groupby 查找列最大值的日期和值
- c++ - 可以在 lambda 运行之前使 lambda 捕获的 [this] 指针无效吗?
- python - 是否可以计算 AWS s3 对象的 sha256 或 sha1 哈希?
- firebase - 在 Firestore 安全规则中列出类型安全
- python - replace() 在 for 循环中不接受关键字参数
- regex - 我的正则表达式查找 IP 有效,但如何排除某些 IP