如何在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
相关产品推荐
相关产品推荐

