我想定义一个方法, blob()
,返回 org.apache.spark.sql.Column
,我可以在scala spark sql中调用它,例如:
spark.sql("blob(...) //other stuff")
因此,我不能将这个方法创建/注册为一个udf,因为它们只能返回类似spark的数据类型 IntegerType
, TimestampType
等等
我考虑将其注册为一个本机spark方法,但这涉及到导入一些第三方repo,这些第三方repo可能会在spark版本的基础上导致将来的问题,或者派生出我自己版本的spark catalyst库——我也不想这样做。
现在,我正在研究如何使用以下扩展构建我的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-但不幸的是,我被困在spark 2.4上,它有一个sparksessionextensions版本,它包含了除该方法之外的所有东西。这样做对吗?
暂无答案!
目前还没有任何答案,快来回答吧!