如何将值转换为列?

时间:2019-05-03 18:19:55

标签: scala apache-spark dataframe

我正在尝试使用以下方法使用其他两个值在数据框中创建新列:

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_latvenue_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)))

如何将我的点值转换为等效的列值?我应该以其他方式添加点列吗?

1 个答案:

答案 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?