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

如何在Polars中用geopy的geodesic函数计算两点地理距离?

Polars中高效计算地理距离与坐标预处理优化

需求说明

我需要在Polars中新增一列,计算两组地理坐标之间的geodesic距离(使用geopy库的geodesic函数)。以下是我在PySpark中的实现参考:

@F.udf(returnType=FloatType())
def geodesic_udf(a, b):
    return geodesic(a, b, ellipsoid="WGS-84").km

df = df.withColumn("distance", geodesic_udf(F.array("lat_1", "lon_1"), F.array("lat_2", "lon_2")))

当前坐标预处理实现

我的坐标原本以逗号分隔的字符串存储在单列中,目前已将其拆分为lat_1、lon_1、lat_2、lon_2四列,并将空值填充为0,代码如下:

df = df.with_columns(((((pl.col(col1).str.split(by=",")).list.get(0)).str.strip_chars()).cast(pl.Float64).alias("lat_1")),
                     ((((pl.col(col1).str.split(by=",")).list.get(1)).str.strip_chars()).cast(pl.Float64).alias("lon_1")),
                     ((((pl.col(col2).str.split(by=",")).list.get(0)).str.strip_chars()).cast(pl.Float64).alias("lat_2")),
                     ((((pl.col(col2).str.split(by=",")).list.get(0)).str.strip_chars()).cast(pl.Float64).alias("lon_2")))

nulls_to_fill = ["lat_1", "lon_1", "lat_2", "lon_2"]
for column in nulls_to_fill:
    df = df.with_columns(pl.col(column).fill_null(0))

遇到的问题与优化需求

我刚接触Polars,尝试用以下代码为geodesic函数创建所需的坐标元组时,出现了内存不足的问题:

df.with_columns(pl.map_batches(["lat_1","lon_1"],lambda s: tuple((s[0],s[1]))).alias("position1")).collect()

希望得到更高效的坐标预处理方式,以及在Polars中实现地理距离计算的最优方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:41