java - 定义可以在不是 UDF 的 spark sql 中调用的自定义方法
问题描述
我想定义一个方法,blob()
它返回一个org.apache.spark.sql.Column
,我可以在 Scala spark sql 中调用它,例如:
spark.sql("blob(...) //other stuff")
因此,我无法将此方法创建/注册为 UDF,因为它们只能返回 Spark 数据类型,如IntegerType
,TimestampType
等
我考虑将其注册为本机 Spark 方法,但这涉及导入一些第三方 repo,这可能会在未来基于 Spark 版本导致问题,或者分叉我自己的 Spark 催化剂库版本——我不想做任何一个。
现在我正在研究使用如下扩展构建我的 Spark 会话:
SparkSession sparkSession = SparkSession.builder()
.config(sparkConf)
.withExtensions(//extensions)
.getOrCreate();
看起来我可以添加可能让我实现目标的规则。看起来 Spark 3.0+ 有一个非常适合这个https://spark.apache.org/docs/3.0.0-preview/api/java/org/apache/spark/sql/SparkSessionExtensions.html#injectFunction-scala的方法.Tuple3- 但不幸的是,我被困在 Spark 2.4 上,它有一个 SparkSessionExtensions 版本,其中包含除该方法之外的所有内容。这是做这件事的正确方法吗?
解决方案
推荐阅读
- user-interface - 如何在 Flutter 中无活动超时后调用方法?
- java - 如何修复 java.sql.SQLException:isValid() 返回 false
- r - 在 R 中使用 GAM 的多个解释变量?
- sql-server - 如何在没有 where 子句的情况下使用转换
- spring-boot - 如何保持spring boot继续连接rabbitmq服务器直到成功
- r - 我想为我的数据拟合一条曲线并执行一阶和二阶导数。我该怎么做?
- reactjs - 如何在 ReactJs 中渲染嵌套路由
- r - 有条件地替换数据框中的字符串
- elm - Elm 初学者的问题:Html 输入似乎阻止了模型属性更新
- javascript - 使用 getAttribute 从 javascript 中的 [object SVGCircleElement] 检索值