使 spark-sql UDF 在 Scala spark 数据框架 DSL API 中可用
Make spark-sql UDF available in Scala spark data frame DSL API
如何在 spark scala 数据帧(非文本)中访问 geomesas UDF api? IE。如何转换
如何使 sql UDF 在文本 spark-sql API 中可用,在 Scala 数据框架 DSL 中可用?
IE。如何启用而不是这个表达式
spark.sql("select st_asText(st_bufferPoint(geom,10)) from chicago where case_number = 1")
类似于
df.select(st_asText(st_bufferPoint('geom, 10))).filter('case_number === 1)
如何注册 geomesas UDF,使其不仅适用于 sql 文本模式。 https://github.com/locationtech/geomesa/blob/f13d251f4d8ad68f4339b871a3283e43c39ad428/geomesa-spark/geomesa-spark-sql/src/main/scala/org/apache/spark/sql/SQLTypes.scala#L59-L66 中的 SQLTypes.init(spark.sqlContext)
似乎只注册文本表达式。
我已经在导入了
import org.apache.spark.sql.functions._
所以这些函数
应该可用。
您可以在要导入的 org.apache.spark.sql.functions
中使用 udf
函数,例如
val myUdf = udf((x: String) => doSomethingWithX(x))
然后您可以在 DSL 中使用 myUdf,如 df.select(myUdf($"field"))
查看 org.apache.spark.sql.functions
中的 callUDF
函数
val spark = SparkSession.builder()
.appName("callUDF")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val df = spark.createDataset(List("abcde", "bcdef", "cdefg")).toDF("str")
df.createTempView("view")
spark.sql("select length(substring(str, 2, 3)) from view").show()
df.select(callUDF("length", callUDF("substring", $"str", lit(2), lit(3)))).show()
spark.stop()
使用 Spark 2.1 测试
如何在 spark scala 数据帧(非文本)中访问 geomesas UDF api? IE。如何转换
如何使 sql UDF 在文本 spark-sql API 中可用,在 Scala 数据框架 DSL 中可用? IE。如何启用而不是这个表达式
spark.sql("select st_asText(st_bufferPoint(geom,10)) from chicago where case_number = 1")
类似于
df.select(st_asText(st_bufferPoint('geom, 10))).filter('case_number === 1)
如何注册 geomesas UDF,使其不仅适用于 sql 文本模式。 https://github.com/locationtech/geomesa/blob/f13d251f4d8ad68f4339b871a3283e43c39ad428/geomesa-spark/geomesa-spark-sql/src/main/scala/org/apache/spark/sql/SQLTypes.scala#L59-L66 中的 SQLTypes.init(spark.sqlContext)
似乎只注册文本表达式。
我已经在导入了
import org.apache.spark.sql.functions._
所以这些函数
应该可用。
您可以在要导入的 org.apache.spark.sql.functions
中使用 udf
函数,例如
val myUdf = udf((x: String) => doSomethingWithX(x))
然后您可以在 DSL 中使用 myUdf,如 df.select(myUdf($"field"))
查看 org.apache.spark.sql.functions
callUDF
函数
val spark = SparkSession.builder()
.appName("callUDF")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val df = spark.createDataset(List("abcde", "bcdef", "cdefg")).toDF("str")
df.createTempView("view")
spark.sql("select length(substring(str, 2, 3)) from view").show()
df.select(callUDF("length", callUDF("substring", $"str", lit(2), lit(3)))).show()
spark.stop()
使用 Spark 2.1 测试