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

如何使用PySpark解码GEOHASH列获取经纬度

如何在PySpark中通过pygeohash解码Geohash获取经纬度?

我尝试使用pygeohash库将Geohash解码为纬度(Latitude)和经度(Longitude),代码如下:

import pygeohash as pgh
from pyspark.sql.types import StringType

udf1 = udf(lambda x: pgh.decode(x))
add_latlong = add.withColumn('location', udf1(col('GEOHASH')))

但执行后得到的结果中,location列显示为对象数组的引用,而非实际经纬度值:

+------------+--------------------+
|     GEOHASH|            location|
+------------+--------------------+
|w284nyv39qzn|[Ljava.lang.Objec...|
|w0zqyr64nt4v|[Ljava.lang.Objec...|
|w2815pb0yfgr|[Ljava.lang.Objec...|
|w281xv1czv1t|[Ljava.lang.Objec...|
|w2r7cvc0m1bz|[Ljava.lang.Objec...|
+------------+--------------------+

我曾尝试在UDF中指定StringType作为返回类型,但结果依旧如此。请问该如何从中提取出实际的纬度和经度?


已验证的解决方案

通过指定UDF的返回类型为ArrayType(FloatType),可以正确解析经纬度数组,再通过索引拆分出纬度和经度列。完整代码及结果如下:

from pyspark.sql.types import ArrayType, FloatType

udf1 = udf(lambda x: pgh.decode(x), ArrayType(FloatType()))
add_latlong = add.withColumn('location', udf1(col('GEOHASH')))\
                 .withColumn('Lat', col('location')[0])\
                 .withColumn('Long', col('location')[1])

执行后的数据框结果:

+------------+--------------------+--------+----------+
|     GEOHASH|            location|     lat|      long|
+------------+--------------------+--------+----------+
|w2864utg8uyf|[3.189408, 101.73...|3.189408| 101.73035|
|w281hj25hzre|[3.017675, 101.42...|3.017675|101.425995|
|w2830hj8vzrp|[3.010423, 101.60...|3.010423|101.609375|
|w0zf5uepz8uk|[4.596367, 101.06...|4.596367| 101.06768|
|w2rkk6s97gvt|[2.167289, 111.63...|2.167289| 111.63843|
+------------+--------------------+--------+----------+ 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:40:33