()类型错误:reverse()采用2个位置参数,但在pyspark中给出了3个

c7rzv4ha  于 2023-03-11  发布在  Spark
关注(0)|答案(2)|浏览(130)

在pyspark代码中

pip install geopy
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent = 'app')
import pandas as pd 
from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType

def direccion_func(lat, lon):
    dir = geolocator.reverse(lat, lon).address
    return dir

direccion = udf(direccion_func, StringType())

paradasRuta1DF = paradasRuta1DF.withColumn('Direccion', direccion_func(F.col("Latitud"), F.col("Longitud")))

我得到错误-〉TypeError:reverse()接受2个位置参数,但给出了3个
我不明白,因为我有两个参数,纬度和经度
多谢帮忙
我也试过:

def direccion_func(coordenadas):
           dir = geolocator.reverse(coordenadas)
           return dir.address
    
        direccion = pandas_udf(direccion_func, returnType = StringType())
    
       paradasRuta1DF = 

paradasRuta1DF.withColumn('Direccion',direccion_func(F.col("LatLong")))

并显示错误:TypeError:无法从列创建Point示例

hsvhsicv

hsvhsicv1#

我认为你得到这个错误的原因是因为reverse函数应该把一个元组或者一个包含给定坐标的列表作为参数。

juzqafwq

juzqafwq2#

对于userAgent“app”我不知道,但是对于userAgent“GetLoc”,lat和long在reverse()方法中位于同一字符串中,如下所示

location = f'{Long}, {Lat}'
geoLoc = Nominatim(user_agent="GetLoc")
locname = geoLoc.reverse(location)

这对我很有效,至少对“GetLoc”userAgent是这样

相关问题