首页 > 解决方案 > 可从 PySpark/Python 调用的 Spark (2.3+) Java 函数

问题描述

重新 Spark Doc 2.3:

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.SQLContext.registerJavaFunction

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 代码的链接都将不胜感激。

Spark:如何将 Python 与 Scala 或 Java 用户定义函数映射?

标签: javaapache-sparkpyspark

解决方案


因此,如果我说 10 个 Java UDF 函数,那么我需要创建 10 个公共 Java 类,每个类有 1 个 UDF,以使它们可以从 PySpark/SQL 调用。

这个对吗?

对,那是正确的。但是,您可以:


推荐阅读