如何在 spark SQL scala DSL API 中访问催化剂表达式(不是常规 UDF)?
http://geospark.datasyslab.org只允许基于文本的执行
GeoSparkSQLRegistrator.registerAll(sparkSession)
var stringDf = sparkSession.sql(
"""
|SELECT ST_SaveAsWKT(countyshape)
|FROM polygondf
""".stripMargin)
当我尝试使用 SQL scala DSL
df.withColumn("foo", ST_Point(col("x"), col("y")))
时,出现类型不匹配预期列得到ST_Point的错误。
我需要更改哪些catalyst expression
内容才能正确注册为可直接通过 scala SQL DSL API 调用的内容?
编辑
Catalog.expressions.foreach(f=>sparkSession.sessionState.functionRegistry.createOrReplaceTempFunction(f.getClass.getSimpleName.dropRight(1),f))
编辑2
import org.apache.spark.sql.geosparksql.expressions.ST_Point
val myPoint = udf((x: Double, y:Double) => ST_Point _)
失败:
_ must follow method; cannot follow org.apache.spark.sql.geosparksql.expressions.ST_Point.type