es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Calcular la distancia geográfica en un dataframe de pyspark.

Mi dataframe:

DF = spark.createDataFrame([[114.038696,  22.5315,  114.047302, 22.531799], [ 114.027901, 22.5228, 114.026299, 22.5238], [ 114.026299, 22.5238,114.024597,22.5271], [114.024597,  22.5271,114.024696,22.527201]], list('ABCD'))
DF.show()
+----------+-------+----------+---------+
|         A|      B|         C|        D|
+----------+-------+----------+---------+
|114.038696|22.5315|114.047302|22.531799|
|114.027901|22.5228|114.026299|  22.5238|
|114.026299|22.5238|114.024597|  22.5271|
|114.024597|22.5271|114.024696|22.527201|
+----------+-------+----------+---------+

(A, B) & (C, D) son coordenadas de dos puntos;

La columna A & C son latitudes;

La columna B & D son longitudes;

Quiero calcular la distancia geográfica entre los dos puntos.

Intento:

from geopy.distance import geodesic
DF = DF.withColumn('Lengths/m', geodesic((['B'],['A']), (['D'],['C'])).m)

Entonces obtengo el error:

TypeError: float() argument must be a string or a number, not 'list'

¿Qué debo hacer de manera diferente para calcular con éxito la distancia geográfica?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular correctamente la distancia geográfica entre los dos puntos, debes utilizar las coordenadas de las columnas del DataFrame en la función geodesic(). El mensaje de error indica que la función espera valores numéricos, pero estás pasando una lista.

    Aquí está el código corregido:

    from geopy.distance import geodesic
    
    DF = DF.withColumn('Lengths/m', geodesic((DF['B'],DF['A']), (DF['D'],DF['C'])).m)
    DF.show()
    

    Este código selecciona los valores de latitud y longitud de las columnas correspondientes en el DataFrame y los pasa como argumentos separados a la función geodesic(). La distancia resultante se agrega como una nueva columna en el DataFrame llamada ‘Lengths/m’.

Comments are closed.