You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks PySpark中用Apache Sedona将Parquet经纬度转为几何点

解决方案

方法1:使用PySpark API(修复函数未导入问题)

你需要先导入Apache Sedona为PySpark提供的空间函数模块,st_makePoint属于sedona.sql.st_functions,未导入会触发"未定义"错误。修改代码如下:

# 导入必要的函数
from sedona.sql.st_functions import st_makePoint, st_setSRID
from pyspark.sql.functions import col

# 读取数据(保留你的原有代码)
rawDf = sedona.read.format("parquet").load("s3://PATH_TO_MY_PARQUET_DATA")

# 生成geometry点列
df = rawDf.withColumn("geometry", st_makePoint(col("longitude"), col("latitude")))

# 可选:为几何列指定坐标系(常用WGS84即EPSG:4326,后续空间操作需统一坐标系)
df = df.withColumn("geometry", st_setSRID(col("geometry"), 4326))

方法2:使用SQL语句(适配你已创建的临时视图)

如果你更习惯SQL语法,可直接通过Spark SQL生成几何列,无需额外导入函数:

# 读取数据并创建临时视图(保留你的原有代码)
rawDf = sedona.read.format("parquet").load("s3://PATH_TO_MY_PARQUET_DATA")
rawDf.createOrReplaceTempView("rawdf")

# 执行SQL生成geometry列
df = spark.sql("""
    SELECT *, ST_MakePoint(longitude, latitude) AS geometry
    FROM rawdf
""")

# 可选:指定坐标系
df = spark.sql("""
    SELECT *, ST_SetSRID(ST_MakePoint(longitude, latitude), 4326) AS geometry
    FROM rawdf
""")

额外优化建议(针对100TB大数据量)

  • 保留Parquet数据的原有分区结构,避免全量重分区带来的性能损耗。
  • 后续执行空间查询前,可对geometry列创建空间索引,大幅提升点-in-多边形等操作的效率。

内容的提问来源于stack exchange,提问作者Maryam_Kh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:22:10