我试图创建最简单的udf来将lat,long值转换为我从JDBC连接到magellan点UDT
的值我试过这样的东西(Spark 2.1):
val spark = SparkSession
.builder()
.master("local[2]")
.getOrCreate()
import spark.implicits._
import org.apache.spark.sql.functions.udf
val df = Seq((30.1,32.2,new PointUDT())).toDF("lat","long","point")
val toPointUDF = udf{(x:Double,y:Double) => new PointUDT.serialize(Point(x,y)) }
val result = df.withColumn("point",toPointUDF($"point")).take(1)
result must beEqualTo(Point(30,10))
遗憾的是它没有通过汇编...... 得到“PointUDT无法从这个地方进入”
我该如何做到这一点?
答案 0 :(得分:0)
我现在遇到类似的问题。 我正在尝试从lat lon创建一个PostGIS点。
我需要将它合并到现有表中。 我也有一个问题,我没有找到一个简单的方法来做upsert = insert / update。
我到目前为止最好的解决方案是将输出写入临时表。删除临时表中的重复项,并从临时表执行upsert到目标表,该目标表也将lat lon转换为PostGIS几何列。