我正在尝试使用以下方法使用其他两个值在数据框中创建新列:
val visits = spark.read
.format("com.databricks.spark.csv")
.schema(schema)
.load(file_location)
.withColumn("point", geometryFactory.createPoint(new Coordinate(visits.select($"venue_lon").map(_.getString(0)).collect.head,visits.select($"venue_lat").map(_.getString(0)).collect.head)))
基本上有两列(venue_lat
和venue_lon
),我正在尝试根据这些值为每一行创建一个地理点。但是当我运行它时会抛出错误:
error: type mismatch;
found : com.vividsolutions.jts.geom.Point
required: org.apache.spark.sql.Column
.withColumn("point", geometryFactory.createPoint(new Coordinate(visits.select($"venue_lon").map(_.getString(0)).collect.head,visits.select($"venue_lat").map(_.getString(0)).collect.head)))
如何将我的点值转换为等效的列值?我应该以其他方式添加点列吗?
答案 0 :(得分:0)
AFAIK使用DataFrame API不能轻松完成,通常会使用lit
,但仅支持某些类型。您可以通过Google搜索UDT(用户定义的类型)。请注意,有一个特殊的库为JTS提供支持:https://www.geomesa.org/documentation/user/spark/spark_jts.html
有关数据集API,另请参见How to store custom objects in Dataset?。