java—定义可在不是udf的spark sql中调用的自定义方法

qcbq4gxm  于 2021-07-14  发布在  Spark
关注(0)|答案(0)|浏览(277)

我想定义一个方法, 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版本,它包含了除该方法之外的所有东西。这样做对吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题